在UISplitViewNavigator的MasterViewController上呈现ViewController

时间:2014-11-04 10:56:38

标签: ios objective-c cocoa-touch uisplitviewcontroller

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

此配置控制器已在单独的故事板(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中。

任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分: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];