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

问题描述 投票:-1回答:1

我有一个带有下面层次结构的tabBarController

TabBarController

  • 选项卡1->包含导航控制器(NavController1)-> ViewController1 -has-> ContainerView --contains-> DisplayedViewControllerTab1(这是我显示的tab1视图控制器)

variable dataForVC1在DisplayedViewControllerTab1中

  • [当用户点击Tab3(DisplayedViewControllerTab3)时,我试图获取dataForVC1的值以传递给tab3 viewController

到目前为止,我已经尝试过了

在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
     }
}

请忠告如何实现此目标

ios swift uiviewcontroller uitabbarcontroller uicontainerview
1个回答
0
投票

您无需四处寻找容器视图。在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
}
© www.soinside.com 2019 - 2024. All rights reserved.