2014-11-04 50 views
0

我使用SplitViewNavigator模板创建了一个新的XCode项目。 MasterViewController的其中一个navigationItems应该提供一个配置ViewController(iPhone上的fullScreen,在iPad上弹出)。在UISplitViewNavigator的MasterViewController上呈现ViewController

此配置控制器已在单独的故事板(Filter.storyboard)中创建。 在这个故事板中,我在舞台上拖动了一个ViewController,并将其嵌入到导航控制器(编辑器 - >嵌入 - >导航控制器)中,因为配置本身由用户可以通过的不同屏幕组成。 NavigationController已被赋予StoryBoard ID“FilterNavController”。

我已经在其他应用程序中做了几次,所以这确实有效。不幸的是,我无法使用SplitViewNavigator模板工作。

下面是我如何尝试打开过滤器控制器,一旦按钮被点击,没有什么特别的;

UIStoryboard *filterBoard = [UIStoryboard storyboardWithName:@"Filter" bundle:nil]; 
UINavigationController *filterNavController = [filterBoard instantiateViewControllerWithIdentifier:@"FilterNavController"]; 
UIViewController *vc = [filterNavController.viewControllers objectAtIndex:0]; 

[self.navigationController presentViewController:vc animated:YES completion:nil]; 

self是MasterViewController。

从我没有受过教育的角度来看,我没有看到任何理由为什么这不起作用。正如我所说,它在其他(非SplitViewNavigator模板)应用程序中执行。 我得到的错误消息如下:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modally an active controller <UINavigationController: 0x7f9bab61a700>.' 

不知道究竟发生了什么怎么回事,但它已经花了我半天。 有趣的是,当我在Filter.storyboard上创建一个UIViewController并设置它的StoryBoardID时,ViewController就会呈现。不过,我需要将它嵌入到UINavigationController中。

任何帮助将不胜感激!

回答

0

为了保证完整性,下面的方法很适合从Storyboard实例化ViewControllers。

不是在Storyboard上创建一个UINavigationController,只是创建ViewController并将它们嵌入代码的UINavigationController中。

UIStoryboard *myBoard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil]; 
MyViewController *menuController = [myBoard instantiateViewControllerWithIdentifier:@"MyViewController"]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:myController]; 
[self presentViewController:navController animated:YES completion:nil]; 
相关问题