如何从另一个选项卡上的场景继续或弹出选项卡式应用程序中第一个选项卡的第二个场景?

How can I segue or pop back to the second scene of the first tab in a tabbed app, from a scene on another tab?

我有一个故事板设置有一个选项卡栏控制器和三个选项卡。每个选项卡都有一个导航控制器。第一个选项卡包含三个场景。在第三个选项卡的视图中有一个按钮(注销),我想在第一个选项卡上转到第二个场景(对应于登录视图控制器并通过显示连接到第一个场景(例如,推送) .

这是我试过的方法:

self.tabBarController?.selectedIndex = 0

只要我在点击 UIButton 后返回到第一个选项卡的初始场景,就可以了。但是由于我想进入第二个场景,所以这不是一个完整的解决方案。我认为解决方案可能是这样的:

self.tabBarController?.selectedViewController = LoginViewController()

self.tabBarController?.setViewControllers(self.LoginViewController, animated: true)

但我不想创建视图控制器的另一个实例。

我还可以使用 .selectedIndex 来实现解决方案吗?

selectedIndex设置为0后,执行你想要的segue(在这个例子中,"loginSegue")。如果您还没有命名您的 segue,您可以在情节提要中命名。

tabBarController?.selectedIndex = 0

if let someViewController = tabBarController?.viewControllers?[0] as? SomeViewController {
    someViewController.performSegueWithIdentifier("loginSegue", sender: nil)
}

我不确定这是否适用于 tabBarController,因为我已经将它用于我的 navigationController,但应该同样有效。

if let tab = self.tabBarController?.viewControllers {
    if let index = find(tab.map { [=10=] is LoginViewController }, true) {
        let destination = tab[index] as LoginViewController
        tabBarController?.presentViewController(destination, animated: true, completion: nil)
    }
}

我会使用 navigationController popToViewController 但我不确定 tabBarController 究竟是如何工作的

您可以尝试的一个简单解决方案是 1. 将全局变量(即在 App Delegate 中)名称设置为布尔类型的 isLogoutClick。 2. 当您在第三个选项卡上并单击注销按钮时,将全局变量 "isLogoutClick" 设置为 true。 3.and 然后导航到第一个选项卡(第一个场景)并在 viewDidLoad 上检查条件 如果(appDelegate.isLogoutClick) { 将您的视图推到下一个场景。 } 4. 将isLogoutClick 的值设为false。 5. 确保最初 isLogoutClick 的值为 false。

尝试这个可能会对你有所帮助。