iOS主细节,如何在iPad中使用不同的细节ViewControllers



我有一个Master Detail iOS应用程序,它是根据带有序列图板的标准XCode模板构建的。我需要在大多数项目上显示一个带有浏览器的视图,以及当用户单击主控形状的UITableView中的"设置"项目时显示一个设置表单(使用FXForms)。

我在iPhone上找到了一种方法,但在iPad上找不到。。在iPhone故事板中,我创建了另一个视图控制器,并从Master到新的视图控制器进行了另一段连接。然后我在didSelectRowAtIndexPath 中执行以下操作

if(indexPath.section == 0 && indexPath.row == 2) // settings
    [self performSegueWithIdentifier:@"showSettings" sender:self];
else
    [self performSegueWithIdentifier:@"showDetail" sender:self];

这样,当我单击"设置"时,"设置"视图就会就位。来回导航也可以。

然而,在iPad中,细节ViewController似乎总是在SplitViewController的右边。如何修改情节提要和/或代码以将默认视图切换到"设置",然后再次切换回?

我还发现XCode中的默认模板为iPad故事板创建了"关系"分段,这是iPhone故事板中没有的类型,不能像我在iPhone案例中那样命名为"showSettings"或"showDetail"。

从对原始帖子的评论中,我发现:

  1. 若我的目标是iOS 8,我可以在iPhone和iPad上使用相同的故事板,然后我可以使用"替换"片段(现在称为"显示细节"片段)切换到另一个细节视图。非常方便,但这还不适用于iOS 7。

  2. 至于iOS 7,我可以使用segues来支持iPhone,而对于iPad,我必须做这样的事情(如果我使用整洁的库来显示带有选项的视图,则为FXForms)。

所以我的iPad代码(在特定行的- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath中)。我确实备份了self.splitViewController.viewControllers的当前lastObject,以恢复Master中表视图的其他行。

FXFormViewController *controller = [[FXFormViewController alloc] init];
IBSettingsForm *settingsForm = [[IBSettingsForm alloc] init];
settingsForm.fontSize = 12;
controller.formController.form = settingsForm;
// this is created so that my new view would have a navigation bar    
UINavigationController *navigationController  = [[UINavigationController alloc] init];
[navigationController pushViewController:controller animated:false];
self.splitViewController.viewControllers = [NSArray arrayWithObjects:[self.splitViewController.viewControllers objectAtIndex:0],
    navigationController, nil];

最新更新