【问题标题】:Swift UISplitViewController with multiple storyboards for Detail View带有多个情节提要的 Swift UISplitViewController 用于详细视图
【发布时间】:2015-11-24 08:35:07
【问题描述】:

我几天来一直在努力解决这个问题,但无法让它发挥作用。阅读多个 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

我怎样才能做到这一点?

非常感谢!

【问题讨论】:

    标签: xcode swift uisplitviewcontroller


    【解决方案1】:

    我找到了一个解决方案,诀窍是删除 segue 并使用这样的情节提要参考:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2012-02-03
      • 2014-01-06
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多