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

19
每当我试图以模态方式呈现UISplitViewController时,应用程序会崩溃。因此,它必须始终是根视图控制器。有人可以确认吗?

仅供参考,我认为这是正确的方法:请参阅类似问题:https://dev59.com/WVPTa4cB1Zd3GeqPkIqB#19983002 - Thiago F. Alencar
5个回答

21
Apple iPad编程指南中可以得知:

分栏视图控制器的视图应始终安装为应用程序窗口的根视图。您不应该在导航或选项卡栏界面中显示分栏视图。

因此,是的,你不能将拆分视图呈现在主应用程序窗口之外(包括模态方式)。

编辑

上述文档的链接不再讨论此主题。可在苹果的iOS视图控制器目录中找到相关讨论,其中指出:

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


你试过了吗?它说的是“应该”而不是“必须”。以全屏模式模态呈现分割视图,无论是在导航界面还是选项卡栏界面内都可以实现。这并不意味着一般情况下不可能实现。 - user309305
1
我个人没有尝试过这个,但考虑到苹果不建议这样做,并且你遇到了问题,重新思考你的设计可能是一个更好的想法。如果你想要一个分屏视图类型的设置,可以在界面构建器中创建自己的“分屏”设置(而不是UISplitViewController),并以这种方式呈现它。 - indragie
10
如果你尝试以模态方式呈现分屏视图,你将会收到一个未捕获的异常:“应用程序试图以模态方式呈现分屏视图控制器”[sic]。 - Kristopher Johnson
如果你捕获异常并继续执行会发生什么? - FeifanZ

3

当我尝试从常规内容视图控制器(即从标签控制器或导航控制器中的Segue没有问题)中进行Segue时,我遇到了相同的问题和错误。

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


我发现在这个解决方案中 - 在Storyboard内 - 从VC到导航控制器的segue应该是模态segue。 - ghr

2

当然可以在不使用它作为根视图控制器的情况下使用UISplitViewController

在我的项目中,我像这样使用:

  1. 使用模态方法展示自己的视图控制器:
[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;

这样你就不会收到来自Split View Controller的代理的消息了。 - ySgPjx

1

UISplitController可以安装在UITabBarController下面。我已经这么做了。只需要在论坛上搜索一下 - 我至少找到了一个好的软件示例。


0

是的,确切地说,您将需要使用RootViewController,并且它应该从UITableViewController继承。 您可以参考这个tutorial


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接