如何从Tab Bar Controller访问子视图控制器

时间:2017-03-05 22:14:04

标签: ios swift swift3

这似乎是一个如此愚蠢的问题,但我无法弄清楚:

我的故事板如下:TabBarController - > Navigation Controller - > Table View Controller 1 - > Table View Controller 2

此代码位于Tab Bar Controller,我正在尝试访问Table View Controller 2

所以我理解它的方式,这让我得到了Navigation Controller

let tempNavVC = self.viewControllers?[0] as! UINavigationController 

这应该是Table View Controller 2,因为我认为它是tempNavVC的{​​{1}}数组的索引1。

viewControllers

然而,显然不是因为我得到了:

  

'NSRangeException',原因:'*** - [__ NSSingleObjectArrayI   objectAtIndex:]:索引1超出边界[0 .. 0]'

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

故事板描述了关系,但它没有描述运行时现实。推送视图控制器(如第二个表视图控制器)是推送发生时可以存在的东西,但它不一定是 存在的东西。

因此,如果导航视图控制器具有两个子节点,tempNavVC.viewControllers[1]将起作用,即如果第二个表视图实际上现在正在界面中显示。但是如果只有第一个表视图控制器子项存在,那就不会(因为第二个尚未实例化并推送到导航视图控制器上)。

答案 1 :(得分:1)

let navC = tabbarController.viewcontrollers[0] as! UINavigationController
let tableC: UIViewController = navC.rootViewController

...