2017-03-05 191 views
0

这看起来是一个愚蠢的问题,但我不能完全弄清楚:如何访问子视图控制器的标签栏控制器

我的故事板是这样的: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为我认为它是tempNavVCviewControllers阵列的索引1。

let secondVC = tempNavVC.viewControllers[1] as! TableViewController2 

但是,这显然不是因为我越来越:

'NSRangeException',原因:“*** - [__ NSSingleObjectArrayI objectAtIndex:]:指数1超出范围[0 .. 0]'

任何帮助将不胜感激。

+0

_What_ “错误” 你好吗? (你的代码中没有反引号,是吗?显示你的_real_代码!) – matt

+0

哎呀,这只是格式错误,当试图写这个问题 – noblerare

+0

好,现在也粘贴在错误消息,请。 – matt

回答

1

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

因此,tempNavVC.viewControllers[1]将工作如果导航视图控制器具有两个孩子,即,如果第二表视图实际上是在界面表示现在。但是,如果只有第一个表视图控制器的孩子在那里,它不会(因为第二个还没有被实例化并被推到导航视图控制器上)。

+0

这是一个很好的帮助。因此,如果我想传递用于显示“Table View Controller 2”的数据,我应该首先将它传递给Table View Controller1。 – noblerare

+0

在这种情况下的常见做法是,vc1将数据传递给vc2。这是有道理的,因为vc1通过它的'prepareForSegue'引用了vc2。 - 涉及标签栏控制器并不那么清晰;我不清楚为什么它有数据。我不是说这是错的,我只是说可能有各种设计。 – matt

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

....

+0

'let tableC:UIViewController = navC.rootViewController' –

相关问题