我有一个带有下面层次结构的tabBarController
TabBarController
variable dataForVC1在DisplayedViewControllerTab1中
到目前为止,我已经尝试过了
在TabBarController中-didSelect方法中
var data: ModelData?
if let navController = tabBarController.viewControllers?[0] as? NavController1,
let childNavVC = navController.children.first as? ViewController1 {
//Get container view
let conView = childNavVC.containerView. //This is outlet
//Looking for something like this - struck here
if let displayedVC1 = "Container view's VC as? DisplayedViewControllerTab1 {
data = displayedVC1.dataForVC1
}
}
请忠告如何实现此目标
您无需四处寻找容器视图。在ViewController1
中,只需添加对DisplayedViewControllerTab1或所需其他vc的引用,然后直接访问它们即可。
您的VC代码看起来像这样。
class ViewController1: UIViewController {
//...
var displayedVC1: DisplayedViewControllerTab1?
//...
}
然后输入您的代码:
var data: ModelData?
if let navController = tabBarController.viewControllers?[0] as? NavController1,
let childNavVC = navController.children.first as? ViewController1 {
data = childNavVC.displayedVc1
}
P.S。为方便起见,如果您拥有自己的TabBarController类,则可以添加创建控制器时所需的所有引用,或者仅具有计算属性,因此您不必一直深入层次结构。
在您的TabbarViewController
类中:
var myViewController1: MyViewControllerOne? {
return (viewControllers[0] as? NavController)?.children.first as? MyViewControllerOne
}
var myViewController2: MyViewControllerTwo? {
return (viewControllers[1] as? NavController)?.children.first as? MyViewControllerTwo
}