Swift 4 - 如何以编程方式从UITabBarController切换ViewControllers

时间:2017-11-06 15:07:17

标签: ios swift uitabbarcontroller

我正在使用UITabBarController,我想在视图中使用一个按钮移动到下一个视图,而不必单击该栏。 我怎么能以编程方式做到这一点?

Storyboard

class PlayTableBarViewController: UITabBarController {
   override func viewDidLoad() {
        super.viewDidLoad() 
    }

    func nextView() {
        print(self.viewControllers!)
        self.selectedViewController = self.viewControllers![self.selectedIndex + 1]
        self.show(self.selectedViewController!, sender: nil)
    }
}

class StartVC: UIViewController {
    private var _fatherVC: PlayTableBarViewController?

    var fatherVC: PlayTableBarViewController {
        if _fatherVC == nil {
            _fatherVC = self.storyboard?.instantiateViewController(withIdentifier: "playViewController") as? PlayTableBarViewController
        }
        return _fatherVC!
    }

    @IBAction func backToGame(_ sender: UIButton) {
        fatherVC.nextView()
    }

}

2 个答案:

答案 0 :(得分:1)

使用UITabBarController的selectedIndex属性(直到您希望UITabBar中有更多部分。

自: https://developer.apple.com/documentation/uikit/uitabbarcontroller/1621171-selectedindex

  

设置此属性会将选定的视图控制器更改为一个   在viewControllers数组中的指定索引处。选择   更多的导航控制器本身,你必须改变的价值   改为selectedViewController属性。

class PlayTableBarViewController: UITabBarController {
    func nextView() {
        self.selectedIndex = self.selectedIndex + 1
    }
}

答案 1 :(得分:0)

我在初始化_fatherVC时发现了错误。这个:

_self.storyboard?.instantiateViewController(withIdentifier: "playViewController")
     as? PlayTableBarViewController_ 

应该是:

_fatherVC = self.tabBarController as? PlayTableBarViewController

现在它完美无缺。