2013-02-04 65 views
0

我想以编程方式用SplitViewController替换当前视图。这是我的代码。UISPlitViewController弹出按钮丢失

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

有没有人有任何想法? – Typhoon101

回答

1

代码中缺少一些内容;

首先,要让导航栏添加按钮,您必须在UISplitViewControllerProjectDetailController之间有UINavigationController

其次,你必须设置一个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,或者手动设置一个标题您刚刚实施的splitViewController:willHideViewController:withBarButtonItem:forPopoverController方法中的barButtonItem