在VC1(集合视图)中,这是我的prepareforsegue代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let segue = segue.destinationViewController as TabBarViewController
var selectedIndex = self.collectionView.indexPathForCell(sender as UICollectionViewCell)
segue.selectedIndexPassing = selectedIndex?.row
}
当我到达VC2(TabBarViewController)时,我printInn()selectedIndexPassing以查看返回的内容。它正确返回。然后,在VC2中,我将此prepareforsegue称为实际视图控制器,或标签栏中的第一个按钮:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var segue = segue.destinationViewController as PlayerFromRosterViewController
segue.selectedIndexPassingForDisplay = 1
}
然而,当我在VC3(PlayerFromRosterViewController)中println()selectedIndexPassingForDisplay
时,我得到了nil。为什么变量没有从Tab Bar导航控制器传递到VC3,AKA是第一个标签栏按钮视图。
答案 0 :(得分:22)
您是否检查过TabBarController中的prepareForSegue
是否被调用?
由于UITabBarController
及其子视图控制器之间的连接不是故事板segue,因此永远不会被调用。您应该通过访问所需索引的UITabBarController
集合,直接从viewControllers
获取对viewController的引用。
var tabBarController = segue.destination as UITabBarController
var destinationViewController = tabBarController.viewControllers[0] as YourViewController // or whatever tab index you're trying to access
destination.property = "some value"