在当前标签栏中获取另一个标签的 viewcontroller 变量 - iOS - Swift

Get another tab's viewcontroller variable in current tab bar - iOS - Swift

我有一个层次结构如下的 tabBarController

TabBarController

变量 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 class,您可以在创建控制器时添加您需要的所有引用,或者只是具有计算属性,因此您不需要一直深入层次结构。

在你的 TabbarViewController class:

var myViewController1: MyViewControllerOne? {
   return (viewControllers[0] as? NavController)?.children.first as? MyViewControllerOne
}
var myViewController2: MyViewControllerTwo? {
   return (viewControllers[1] as? NavController)?.children.first as? MyViewControllerTwo
}