Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从另一个选项卡上的场景切换或弹出回选项卡应用程序中第一个选项卡的第二个场景?_Ios_Swift_Uitabbarcontroller_Segue - Fatal编程技术网

Ios 如何从另一个选项卡上的场景切换或弹出回选项卡应用程序中第一个选项卡的第二个场景?

Ios 如何从另一个选项卡上的场景切换或弹出回选项卡应用程序中第一个选项卡的第二个场景?,ios,swift,uitabbarcontroller,segue,Ios,Swift,Uitabbarcontroller,Segue,我有一个故事板设置了一个选项卡栏控制器和三个选项卡。每个选项卡都有一个导航控制器。第一个选项卡有三个场景。第三个选项卡上的视图中有一个按钮(注销),我想将其切换到第一个选项卡上的第二个场景(对应于登录视图控制器,并通过Show连接到第一个场景(例如,按下) 以下是我尝试过的: self.tabBarController?.selectedIndex = 0 这是可行的,只要我点击UIButton返回到第一个选项卡的初始场景。但由于我想进入第二个场景,这不是一个完整的解决方案。我认为解决方案可能

我有一个故事板设置了一个选项卡栏控制器和三个选项卡。每个选项卡都有一个导航控制器。第一个选项卡有三个场景。第三个选项卡上的视图中有一个按钮(注销),我想将其切换到第一个选项卡上的第二个场景(对应于登录视图控制器,并通过Show连接到第一个场景(例如,按下)

以下是我尝试过的:

self.tabBarController?.selectedIndex = 0
这是可行的,只要我点击UIButton返回到第一个选项卡的初始场景。但由于我想进入第二个场景,这不是一个完整的解决方案。我认为解决方案可能是:

self.tabBarController?.selectedViewController = LoginViewController()

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


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

selectedIndex
设置为
0
后,执行所需的序列(在本例中为
“loginSegue”
)。如果尚未命名,则可以在故事板中命名序列

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 { $0 is LoginViewController }, true) {
        let destination = tab[index] as LoginViewController
        tabBarController?.presentViewController(destination, animated: true, completion: nil)
    }
}

对于navigationController,我会使用
popToViewController
,但我不确定tabBarController到底是如何工作的一个简单的解决方案是 1.将全局变量(即应用程序内委托)名称设置为布尔类型的isLogoutClick。 2.在第三个选项卡上单击注销按钮,然后将全局变量“isLogoutClick”设置为true。 3.然后导航到第一个选项卡(第一个场景),在viewDidLoad上只需检查 如果(appDelegate.isLogoutClick) { 将视图推到下一个场景。 } 4.将isLogoutClick的值设为false。 5.首先确保isLogoutClick的值为false

试试这个也许会对你有帮助

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