Swift 在同一选项卡栏中获取另一个视图控制器的实例

Swift 在同一选项卡栏中获取另一个视图控制器的实例,swift,xcode,Swift,Xcode,我的选项卡栏有3个选项卡。如果我首先在tab 1的视图控制器上,然后在应用程序中的某个时间,我在tab 2中结束,那么如何获取当前加载的tab 1实例(代码中)?视图控制器的viewDidLoad函数只被调用一次,所以只要我访问了一个选项卡,它的视图控制器仍然在某个地方 是否可以在选项卡栏控制器中获取对另一个视图控制器实例的引用?我不想实例化新的视图控制器,我想要的是已加载的当前实例。是的,这是可能的。您可以通过向UITabBarController中的viewcontrollers属性提供所需

我的选项卡栏有3个选项卡。如果我首先在tab 1的视图控制器上,然后在应用程序中的某个时间,我在tab 2中结束,那么如何获取当前加载的tab 1实例(代码中)?视图控制器的viewDidLoad函数只被调用一次,所以只要我访问了一个选项卡,它的视图控制器仍然在某个地方


是否可以在选项卡栏控制器中获取对另一个视图控制器实例的引用?我不想实例化新的视图控制器,我想要的是已加载的当前实例。

是的,这是可能的。您可以通过向
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