因为我想重新设计标签栏用户界面,所以我根据https://github.com/codepath/ios_guides/wiki/Creating-a-Custom-Tab-Bar
TabBarViewController的viewDidLoad()中,定义对应于每个选项卡栏的几个子视图

homeViewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController")
...
viewControllers = [homeViewController, searchViewController, accountViewController, trendingViewController]

以及轻敲tab键的主要方法
@IBAction func didPressTab(_ sender: UIButton) {

        let previousIndex = selectedIndex
        selectedIndex = sender.tag

        tabButtons[previousIndex!].isSelected = false
        let previousVC = viewControllers[previousIndex!]

        // remove previous VC
        previousVC.willMove(toParentViewController: nil)
        previousVC.view.removeFromSuperview()
        previousVC.removeFromParentViewController()

        // set current VC
        sender.isSelected = true
        let vc = viewControllers[selectedIndex]

        addChildViewController(vc)

        // Adjust the size to match content view
        vc.view.frame = contentView.bounds
        contentView.addSubview(vc.view)
        vc.didMove(toParentViewController: self)
    }

加载tab bar视图时,我可以设置默认的tab bar indexselectedIndex。但是,如何切换到homeViewController中的下一个选项卡栏(不点击选项卡栏按钮)?
这在homeViewController中不起作用
TabBarViewController().tabButtons[2].isSelected = true TabBarViewController().didPressTab(TabBarViewController().tabButtons[2])
我不知道如何获取正在运行的选项卡控制器,设置selectedIndex,以及更新子视图控制器中的子视图。

最佳答案

只需调用tabBar.setSelectedViewController:并传递视图控制器。
如果只知道选项卡索引,则调用tabBar.viewControllers[index]并获取视图控制器。

08-26 12:13