故事板、UIViewController 和 UISplitViewController

Posted

技术标签:

【中文标题】故事板、UIViewController 和 UISplitViewController【英文标题】:Storyboard, UIViewController and UISplitViewController 【发布时间】:2012-02-21 02:36:36 【问题描述】:

尝试为 iPad 制作基于故事板的应用程序。在其中,我需要从开始屏幕(UIViewController)转换到主屏幕(UISplitViewController),然后转换到全屏视图(再次是 UIViewController)。

我在网上看到了一些讨论(至少有几个 - 在 *** 上),指出 UISplitViewController 不能在基于 Storyboard 的应用程序中使用,除了作为 RootViewController 之外的任何其他方式。一些线程包含解决方法,还有替代的 splitview (https://github.com/mattgemmell/MGSplitViewController) 来解决这个问题。

但我不明白为什么 Apple 文档中的说法恰恰相反。这是来自 Apple 的 ios 5.0 库的章节的link。它指出:


使用情节提要创建拆分视图控制器

要将拆分视图控制器添加到应用程序的情节提要:

    打开应用程序的主故事板。 将拆分视图控制器拖出库。这也创建了视图控制器 用于拆分视图控制器的两个窗格。 对于每个拆分视图控制器包含的视图控制器,使用身份检查器设置视图控制器的类名。

要显示拆分视图界面,​​请执行以下操作之一:

通过选择场景并检查,将其显示为第一个场景 属性检查器下的“是初始视图控制器”框。 通过向其添加模态转场,从另一个场景中显示它。 以编程方式显示它,通过调用 performSegueWithIdentifier:sender: 方法来启动模态转场。

我尝试了很多方法,但最后两个语句中描述的方法从未奏效。 modal segue 和 performSegue... 都失败并出现众所周知的错误:

“***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'应用程序试图以模态方式呈现拆分视图控制器......”

谁能解释一下?这是 XCODE/iOS 5.0 中的错误还是文档中的错误?

问候, 彼得

【问题讨论】:

向 Apple 提交了一个错误,并为提到的文档页面发送了反馈。收到他们的解决方案后会回复。 您找到解决方案了吗?我遇到了同样的问题,我找不到从 View Controller 转换到 SplitView Controller 的方法。提前致谢。 @dcastro 一种方法是使用大小为“全屏”的模式视图。只是一个解决方案,而不是解决方案 我在 iOS 7 下得到一个 [UISplitViewController setMainNavigationItem:]: unrecognized selector sent to instance 异常,谷歌没有显示任何结果。所以如果你有同样的异常,那是因为你的SplitView必须是rootViewController。希望我可以帮助其他人搜索该错误。 【参考方案1】:

根据这个 Apple article,拆分视图控制器必须是根。这是一个sn-p:

拆分视图控制器必须始终是您创建的任何界面的根。换句话说,您必须始终将 UISplitViewController 对象中的视图安装为应用程序窗口的根视图。然后,您的拆分视图界面的窗格可能包含导航控制器、标签栏控制器或您需要实现界面的任何其他类型的视图控制器。拆分视图控制器不能以模态方式呈现。

【讨论】:

谢谢!但是您的链接指向我在帖子中提到的同一篇文章,只是上面的一段。这使得它(文档中的文章)本身就不一致。所以让我们等待水果公司的反馈。【参考方案2】:

似乎documentation 在发布此问题后不久就更新了。根据新文档,没有办法继续使用情节提要。无赖!

【讨论】:

【参考方案3】:

是的,可以从 UIView 传递到 UISplitView。 您必须使用自定义转场。

阅读此链接(从日语翻译)

UIViewController to UISplitViewController

【讨论】:

【参考方案4】:

就我而言,我使用MGSplitViewController 来实现带有模态或推送segues 的SplitView。 试试看,效果不错!

【讨论】:

以上是关于故事板、UIViewController 和 UISplitViewController的主要内容,如果未能解决你的问题,请参考以下文章

故事板中的 UIViewController 容器

UIViewImage 推送到故事板中的新 UIViewController

来自其他目标的故事板参考类中的 UIViewController

如何使用单个故事板uiviewcontroller为多个子类

在新的故事板中将值传递给 UIViewController - Swift

从 UIScrollView 子视图呈现故事板 UIViewController