【问题标题】:Split view controller must be root view controller拆分视图控制器必须是根视图控制器
【发布时间】:2011-02-04 12:14:59
【问题描述】:

每当我尝试以模态方式呈现 UISplitViewController 时,应用程序就会崩溃。因此它必须始终是根视图控制器。谁能确认一下?

【问题讨论】:

标签: ios ipad uisplitviewcontroller


【解决方案1】:

来自Apple iPad Programming Guide

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

所以是的,您不能在主应用程序窗口之外显示拆分视图(包括模态)。

编辑

上述文档的链接不再讨论此主题。现在可以在 Apple 的View Controller Catalog for iOS 找到相关讨论,其中声明如下:

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

【讨论】:

  • 你试过了吗?它说“应该”而不是“必须”。在全屏模式下以模态方式呈现拆分视图是在导航内还是标签栏界面内。这并不表示一般情况下不可能。
  • 我自己没有尝试过,但考虑到 Apple 建议不要这样做,并且您遇到了问题,重新考虑您的设计可能是一个更好的主意。如果您想要拆分视图类型设置,在 Interface Builder 中创建自己的“拆分视图”设置(而不是 UISplitViewController)并以模态方式呈现会很简单。
  • 如果您尝试以模态方式呈现拆分视图,您将收到未捕获的异常:“应用程序尝试以模态方式呈现拆分视图控制器”[原文如此]
  • 如果捕获异常并继续,会发生什么?
【解决方案2】:

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

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

【讨论】:

  • 我发现在这个解决方案中 - 在 Storyboard 中 - 从 VC 到导航控制器的 segue 应该是 Modal segue。
【解决方案3】:

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

  1. 以模态方法显示我自己的视图控制器:
[自我presentModalViewController:mainViewController动画:YES];
  1. 在 mainViewController 中,我有
UISplitViewController *splitViewController;

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

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

【讨论】:

  • 不过,这样您就不会从拆分视图控制器的委托中获得消息。
【解决方案4】:

UISplitController 可以安装在 UITabBarController 下。我做。只需在此论坛上使用搜索即可 - 我找到了至少一个不错的软件示例。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      相关资源
      最近更新 更多