从 splitviewcontroller 中的 masterVewController 访问 ROOT detailViewController

Posted

技术标签:

【中文标题】从 splitviewcontroller 中的 masterVewController 访问 ROOT detailViewController【英文标题】:Access the ROOT detailViewController from the masterVewController in a splitviewcontroller 【发布时间】:2019-12-14 21:44:35 【问题描述】:

这是我的应用程序的布局

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

当我从 tableViewController 中打印 splitViewController (print(self.splitViewController?.viewControllers)) 的视图控制器时,这就是我得到的

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

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

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

【问题讨论】:

【参考方案1】:

尝试将其转换如下:

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

【讨论】:

【参考方案2】:

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

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

然后我用

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

放在 viewDidAppear 里面


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

【讨论】:

以上是关于从 splitviewcontroller 中的 masterVewController 访问 ROOT detailViewController的主要内容,如果未能解决你的问题,请参考以下文章

在 splitviewcontroller 中将数组从 masterview 发送到 detailview

替换 SplitViewController 中的 TableView

splitViewController 中的最终位置何时结束?

如何将 RootViewController 设置为 SplitViewController 中的分组表

旋转 SplitViewController 会弄乱主视图中的工具栏

splitViewController 的 barButtonItem 未显示在屏幕上?