2015-04-05 92 views
1

我有一个设置了标签栏控制器和三个标签的故事板。每个标签都有一个导航控制器。第一个标签有三个场景。在第三个选项卡的视图中有一个按钮(注销),我想继续到第一个选项卡上的第二个场景(对应于登录视图控制器并通过显示(例如Push)连接到第一个场景) 。如何从另一个选项卡上的场景中将标签应用程序中的第一个选项卡的第二个场景放回或回弹?

这里是我试过:

self.tabBarController?.selectedIndex = 0 

这个工作,只要我回到第一个选项卡的初始场景敲击的UIButton后,但因为我想获得的第二个场景,这不是一个完整的解决方案,我认为解决方案可能会沿着这条线:

self.tabBarController?.selectedViewController = LoginViewController() 

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

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

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

回答

2

一个简单的解u可以尝试是 1.设置一个全局变量(即应用代表)的名字作为logoutClick类型布尔值。 2.当你在第三个标签上,点击注销按钮,然后将全局变量“isLogoutClick”设置为true。 3.and然后导航到第一个标签(第一现场)和viewDidLoad中只检查 如果(appDelegate.isLogoutClick) { 把你的视图下一个场景的条件。 } 4.使false为isLogoutClick的值。 5.确保最初isLogoutClick的值为false。

试试这可能会帮助你。

0

selectedIndex设置为0后,执行所需的延期(在本例中为"loginSegue")。如果你还没有,你可以在故事板中命名你的segue。

tabBarController?.selectedIndex = 0 

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

我不确定这是否适用于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究竟是如何工作的

相关问题