如何关闭控制器然后切换选项卡

时间:2017-01-21 23:17:28

标签: swift

我在标签栏控制器中有两个主要的VC。在第一个VC上点击一个按钮,你将被带到另一个VC(而不是第二个标签栏VC),当你点击完成按钮时,我想转到第二个标签栏vc。

通常我会执行segue ...但是当我这样做时它会移除底部的标签栏。所以,我现在只是解雇并回到最初的VC,但我真的想去第二个标签栏vc,所以我尝试了这个

dismiss(animated: true) { 
  self.tabBarController?.selectedIndex = 2
}

我在另一个SO帖子上看到了self.tabBar ...但是我似乎无法找到我设置索引的位置...我试过1以防万一它自动从0开始,我尝试过如果它从1开始

我是否关闭或者是否有更好的方法来实现我想要的目标?

摘要

总结清楚。我有3个视图控制器。 1和3位于标签栏控制器中。 VC 2不在TBC中。要进入VC 2,VC 1上有一个按钮。当用户在VC 2上完成时,他/她点击一个按钮。而不是仅仅退回到VC 1我想转到VC 3,但是当我执行segue时它转到VC 3但是移除了Tab Bar

3 个答案:

答案 0 :(得分:9)

确保您拥有UINavigationController作为第一个ViewController。然后您可以访问tabBarController,然后可以切换选项卡:

view controllers

// if vc was pushed
@IBAction func onFinish(_ sender: Any) {
    // store tabBarController for later use
    let tabBarController = self.tabBarController

    // pop to root vc (green one)
    _ = self.navigationController?.popToRootViewController(animated: false)

    // switch to 2nd tab (red vc)
    tabBarController?.selectedIndex = 1
}
// if vc was presented modally
@IBAction func onFinish(_ sender: Any) {
    self.dismiss(animated: false, completion: nil)

    if let tabBarController = self.presentingViewController as? UITabBarController {
        tabBarController.selectedIndex = 1
    }
}
// if vc was presented modally + switching tab in completion block
@IBAction func onFinish(_ sender: Any) {
    if let tabBarController = self.presentingViewController as? UITabBarController {
        self.dismiss(animated: true) {
            tabBarController.selectedIndex = 1
        }
    }
}

答案 1 :(得分:0)

索引很可能始终从您使用的任何语言的0开始。

至于您在视图控制器上调用self的标签栏,它不在视图控制器上显示它正在解除。你应该可以做到

self.window?.rootViewController.tabBarController?.selectedIndex = 1

为了实现这一目标。根据您的VC的设置,这可能不起作用,因此您可能需要使用它。

答案 2 :(得分:0)

您可以在关闭视图控制器之前移动到特定索引。

func moveToVC() {
        if let mainNavVC = self.presentingViewController as? UINavigationController {
            if mainNavVC.viewControllers.count > 0 {
                if let tabbarVC = mainNavVC.viewControllers.first as? TabBarViewController {
                    tabbarVC.selectedIndex = 0
                }
            }
        }
    }