在 UISplitViewNavigator 的 MasterViewController 上呈现 ViewController

Posted

技术标签:

【中文标题】在 UISplitViewNavigator 的 MasterViewController 上呈现 ViewController【英文标题】:Present ViewController on UISplitViewNavigator's MasterViewController 【发布时间】:2014-11-04 10:56:37 【问题描述】:

我使用 SplitViewNavigator 模板创建了一个新的 XCode 项目。 MasterViewController 的其中一个 navigationItem 应该显示一个配置 ViewController(iPhone 上的全屏,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】:

为了完整起见,以下方法非常适用于从 Storyboard 实例化 ViewController。

无需在 Storyboard 上创建 UINavigationController,只需创建 ViewController(s) 并将它们嵌入代码中的 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];

【讨论】:

以上是关于在 UISplitViewNavigator 的 MasterViewController 上呈现 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

上传的数据在云端的怎么查看,保存在啥位置?

蓝牙接收的文件在哪里呢

分配的变量引用在哪里,在堆栈中还是在堆中?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

iptables,你到底在哪里

藏在星河里的温柔文案