从 splitviewcontroller 中的 masterVewController 访问 ROOT detailViewController

Access the ROOT detailViewController from the masterVewController in a splitviewcontroller

这是我的应用程序的布局

我正在尝试从 TableViewController 中访问 startViewController 的变量。

当我从 tableViewController 中打印 splitViewController (print(self.splitViewController?.viewControllers)) 的 viewController 时,这就是我得到的结果

Optional([<UINavigationController: 0x12200f600>, <temp.CollectionViewController: 0x121e16860>])

第二个 viewController(temp.CollectionViewController) 应该是 startViewController 类型。

我程序中的 startViewController 使用 segue 和 kind show 呈现 collectionViewController。当我调用 print(self.splitViewController?.viewControllers) 时,collectionViewController 已经被搜索到。

尝试按如下方式转换:

splitViewController?.viewControllers.forEach({ (vc) in
  if let startController = vc as? startViewController {
    --- Your code ---
    return
  }            
})

我最终需要将 StartViewController 放入 UINavigationController 中。然后我可以使用

访问第一个 viewController
var detailStart = (splitViewController?.viewControllers[1] as? UINavigationController)?.viewControllers.first as? StartViewController

然后我用

隐藏了不需要的导航栏
navigationController?.setNavigationBarHidden(true, animated: false)

放在viewDidAppear里面


这最终对我来说是一个不错的解决方案,因为无论如何我都需要将 CollectionViewController 放在 UINavigationController 中,但这似乎有点老套,也许不是最佳实践