Swift 在同一选项卡栏中获取另一个视图控制器的实例
我的选项卡栏有3个选项卡。如果我首先在tab 1的视图控制器上,然后在应用程序中的某个时间,我在tab 2中结束,那么如何获取当前加载的tab 1实例(代码中)?视图控制器的viewDidLoad函数只被调用一次,所以只要我访问了一个选项卡,它的视图控制器仍然在某个地方Swift 在同一选项卡栏中获取另一个视图控制器的实例,swift,xcode,Swift,Xcode,我的选项卡栏有3个选项卡。如果我首先在tab 1的视图控制器上,然后在应用程序中的某个时间,我在tab 2中结束,那么如何获取当前加载的tab 1实例(代码中)?视图控制器的viewDidLoad函数只被调用一次,所以只要我访问了一个选项卡,它的视图控制器仍然在某个地方 是否可以在选项卡栏控制器中获取对另一个视图控制器实例的引用?我不想实例化新的视图控制器,我想要的是已加载的当前实例。是的,这是可能的。您可以通过向UITabBarController中的viewcontrollers属性提供所需
是否可以在选项卡栏控制器中获取对另一个视图控制器实例的引用?我不想实例化新的视图控制器,我想要的是已加载的当前实例。是的,这是可能的。您可以通过向
UITabBarController
中的viewcontrollers
属性提供所需的UIViewController
索引来获取它的实例
class MyTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
// after loading is done
let firstViewController = viewControllers?[0]
print(firstViewController?.title)
}
}
如果您试图从UINavigationController
中嵌入的secondViewController
获取firstViewController
,请使用以下方法:
class SecondController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// after loading is done
let firstViewController = navigationController?.tabBarController?.viewControllers?[0]
print(firstViewController?.title)
}
}
以下是扩展版本,以防您不确定:
class SecondController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// after loading is done
if let navigationController = navigationController {
if let tabBarController = navigationController.tabBarController {
let firstViewController = tabBarController.viewControllers?[0]
print(firstViewController?.title)
} else {
print("I'm not embedded in a tabBar controller")
}
} else {
print("I'm not embedded in a navigation controller")
if let tabBarController = tabBarController {
let firstViewController = tabBarController.viewControllers?[0]
print(firstViewController?.title)
} else {
print("I'm not embedded in a tabBar controller")
}
}
}
}
例如,如果您在选项卡2中的vc中,您可以从选项卡1中获取viewController,如下所示:
if let firstTabVc = tabBarController?.viewControllers.first {
//you have vc here
}
如果让firstViewController=navigationController?.tabBarController?.ViewController?.first{
谢谢你的详细回答!我的视图控制器嵌入到导航控制器中,然后又嵌入到选项卡栏控制器中,所以这起作用了!谢谢!我不知道我们可以直接调用tabBarController来获取当前的tabBarController