分割视图控制器必须是根视图控制器

问题描述:

每当我尝试以模态方式呈现UISplitViewController时,应用程序会崩溃。因此它必须永远是根视图控制器。任何人都可以证实吗?分割视图控制器必须是根视图控制器

+0

仅供参考,我认为这是要走的路:看到类似的问题:http://*.com/a/19983002/1134595 – 2013-11-14 16:31:59

Apple iPad Programming Guide

拆分视图控制器的视图 应始终安装了您的应用程序窗口的根 视图。您的 应该永远不会在导航栏或标签栏 界面内呈现分割视图 。

所以,是的,你不能在你的主应用程序窗口(包括模态)之外呈现分割视图。

编辑

到文档上面的链接不再讨论这个话题。相关的讨论现在可以在苹果的View Controller Catalog for iOS可以发现,其规定如下:

分割视图控制器必须始终为您创建任何接口的根。换句话说,您必须始终将UISplitViewController对象的视图安装为应用程序窗口的根视图。 [...]分割视图控制器不能以模态方式呈现。

+0

你试过吗?它说“应该”而不是“必须”。在全屏模式下以模态方式呈现分割视图,无论是在导航区还是标签栏界面中。这并不表示一般情况下是不可能的。 – user309305 2010-04-05 17:49:50

+1

我自己并没有尝试过这个,但考虑到Apple建议不要这样做,并且遇到问题,重新考虑设计可能是一个更好的主意。如果你想要一个分割视图类型的设置,在Interface Builder中创建你自己的“分割视图”设置(而不是UISplitViewController)会很简单,并且以模态方式呈现。 – indragie 2010-04-05 18:26:45

+0

不错的主意。谢谢! – user309305 2010-04-06 07:53:58

当然u可以使用UISplitViewController不使用它作为根视图控制器。 在我的项目,我用这样的:

  1. 显示在模态方法我自己的ViewController:
 
[self presentModalViewController:mainViewController animated:YES]; 
  1. 在mainViewController,我有
 
UISplitViewController *splitViewController; 

- (void)viewDidLoad,设置splitViewController.viewmainViewController.view

splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil]; 
self.view = splitViewController.view; 
+0

这样你就不会从Split View Controller的委托中获得消息。 – pt2ph8 2011-04-08 13:01:50

的UISplitController CAN BE的UITabBarController下安装。我这样做。在这个论坛上使用搜索 - 我发现至少有一个好的软件样本。

当我试图从常规的内容视图控制器中继续播放时(即,从标签控制器或导航控制器继续播放时),我遇到了同样的问题。

幸运的是,我找到了一种方法来通过在VC和分割视图控制器之间插入一个导航控制器来解决这个问题。换句话说,从VC中导航到导航控制器,然后绘制导航控制器和分离视图控制器之间的关系连接。这样,实例化分割视图仍然不需要编码。

+0

我发现在这个解决方案中 - 在一个Storyboard内 - 从VC到导航控制器的segue应该是一个Modal segue。 – ghr 2014-05-14 01:02:23

是的确实你必须使用RootViewController,它应该从UITableViewController继承。你可以看看这个tutorial