因为我想重新设计标签栏用户界面,所以我根据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 index
selectedIndex
。但是,如何切换到homeViewController中的下一个选项卡栏(不点击选项卡栏按钮)?这在
homeViewController
中不起作用TabBarViewController().tabButtons[2].isSelected = true TabBarViewController().didPressTab(TabBarViewController().tabButtons[2])
我不知道如何获取正在运行的选项卡控制器,设置selectedIndex,以及更新子视图控制器中的子视图。
最佳答案
只需调用tabBar.setSelectedViewController:并传递视图控制器。
如果只知道选项卡索引,则调用tabBar.viewControllers[index]并获取视图控制器。