我正在尝试以编程方式用SplitViewController替换当前视图。这是我的代码。
ProjectNavigationController *projectNavPanel = [[ProjectNavigationController alloc] init];
[projectNavPanel setProjectIndex:[indexPath row]];
[projectNavPanel setKuluId:[[[[[appDelegate userSettingsDictionary] objectForKey:@"Projects"] objectAtIndex:[indexPath row]] objectForKey:@"Kulu Id"] intValue]];
ProjectDetailController *projectDetailPanel = [[ProjectDetailController alloc] init];
[projectDetailPanel setProjectIndex:[indexPath row]];
ProjectSplitViewController *splitRootController = [[ProjectSplitViewController alloc] init];
[splitRootController setViewControllers:[NSArray arrayWithObjects:projectNavPanel, projectDetailPanel, nil]];
[[self view] removeFromSuperview];
[[appDelegate window] setRootViewController:splitRootController];
这几乎是正常的,有一个例外。加载拆分视图控制器并处于纵向模式时,导航视图会隐藏 - 如预期的那样 - 但详细信息视图没有带有按钮的工具栏,以在弹出视图中显示导航。根据我的研究,我明白这是默认行为。我错过了什么吗?在detailViewController中几乎没有,所以我没有在这里包含代码,但如果有帮助,请告诉我。
答案 0 :(得分:1)
您的代码中缺少一些内容;
首先,要让导航栏添加按钮,您必须在UINavigationController
和UISplitViewController
之间设置ProjectDetailController
。
其次,您必须设置UISplitViewControllerDelegate并使用委托方法添加按钮:
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
[[projectDetailPanel navigationItem] setLeftBarButtonItem:barButtonItem animated:YES];
}
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
[[projectDetailPanel navigationItem] setLeftBarButtonItem:nil animated:YES];
}
第三,不要忘记将标题设置为ProjectNavigationController
,或手动将标题设置为刚刚实施的barButtonItem
方法中的splitViewController:willHideViewController:withBarButtonItem:forPopoverController
。