在当前标签栏中获取另一个标签的 viewcontroller 变量 - iOS - Swift
Get another tab's viewcontroller variable in current tab bar - iOS - Swift
我有一个层次结构如下的 tabBarController
TabBarController
- Tab 1 -> Contains Navigation Controller(NavController1) -> ViewController1 -has--> ContainerView --contains--> DisplayedViewControllerTab1(这是我显示的 tab1 视图控制器)
变量 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
}
}
请教如何实现这个
您无需忙于处理容器视图。在您的 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
}
我有一个层次结构如下的 tabBarController
TabBarController
- Tab 1 -> Contains Navigation Controller(NavController1) -> ViewController1 -has--> ContainerView --contains--> DisplayedViewControllerTab1(这是我显示的 tab1 视图控制器)
变量 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
}
}
请教如何实现这个
您无需忙于处理容器视图。在您的 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
}