带有多个故事板的Swift UISplitViewController,用于详细信息视图

时间:2015-11-24 08:35:08

标签: xcode swift uisplitviewcontroller

我几天来一直在努力解决这个问题而无法让它发挥作用。阅读多篇SO帖子(thisthisthisthisthisthis)。问我的朋友谷歌,帮助理解问题,但没有解决它。

在我的iOS应用程序的第一个版本(Swift2和XCode7)中,我使用UITableViewController和UINavigationViewController从不同的UIStoryboard加载新内容。一切正常。对于这个应用程序的第二个版本,我想实现一个UISplitViewController,现在我收到错误:

  

***由于未捕获的异常终止应用程序' UIViewControllerHierarchyInconsistency',原因:'添加根视图控制器作为视图控制器的子级:

我理解提示,但不能以纵向和横向模式工作的方式解决它。此外,我所采用的解决方案并没有在横向使用UINavigationController。

我创建了一个测试项目来追踪这个错误,希望能解决它。

这是生成错误的代码:

let storyboard = UIStoryboard(name: "ThirdScreen", bundle: nil)
    let controller = storyboard.instantiateInitialViewController() as! ThirdDetailViewController
    controller.title = "Miracle!"
    splitViewController?.showDetailViewController(controller, sender: nil)

此测试项目的完整代码为available from GitHub

我该如何做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:4)

我找到了一个解决方案,诀窍是删除segue并使用这样的故事板引用:

storyboard reference

出于测试和教学目的,我创建了一个完整的测试项目available from GitHub。这演示了在详细视图中使用多个故事板。

11月28日更新:此解决方案有效,但需要iOS 9.完全可以使用另一个UIViewController作为DetailViewController(意味着可以使用该模板),只要你删除segue,实现tableView: didSelectRowAtIndexPath并使用示例中的代码。在后一种情况下,它也适用于iOS 8。