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

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

从Apple iPad编程指南 :

应始终将分割视图控制器的视图安装为应用程序窗口的根视图。 您不应在导航栏或标签栏界面中显示拆分视图。

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

编辑

上面的文档链接不再讨论这个话题。 现在可以在苹果的iOS视图控制器目录中find相关的讨论,其中说明如下:

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

当我试图从一个普通的内容视图控制器(即从标签控制器或导航控制器继续)没有问题时,我得到了同样的问题。

幸运的是,我find了一种方法来避免这种情况,在VC和分割视图控制器之间插入一个导航控制器。 换句话说,从VC延伸到导航控制器,然后绘制导航控制器和分离视图控制器之间的关系连接。 这样,实例化分割视图仍然不需要编码。

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

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

并在- (void)viewDidLoad ,将splitViewController.view设置为mainViewController.view

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

UISplitController可以安装在UITabBarController下。 我这样做。 只需使用search在这个论坛上 – 我发现至less有一个很好的软件样本。

是的确实,你将不得不使用RootViewController,它应该从UITableViewControllerinheritance。 你可以看看这个教程