以编程方式设置选项卡栏项目

joe*_*oey 1 uitabbarcontroller ios swift

我有一个选项卡栏,我想根据用户的设置更改其项目。因此,我需要能够以编程方式从选项卡栏中添加/删除项目。这是我的代码:

class TabBarViewController: UITabBarController {
var controllerArray = [UIViewController]()

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    self.tabBar.tintColor = UIColor.greenColor()

    let storyBoard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
    let controller1 = storyBoard.instantiateViewControllerWithIdentifier("Navigation2") as! nav2
    let controller2 = storyBoard.instantiateViewControllerWithIdentifier("Explore") as! ExploreNavigation
    let controller3 = storyBoard.instantiateViewControllerWithIdentifier("friends") as! ExploreNav
    let controller4 = storyBoard.instantiateViewControllerWithIdentifier("controller3ID") as! controller3VC
    controllerArray.append(controller1)
    controllerArray.append(controller2)
    controllerArray.append(controller3)
    controllerArray.append(controller4)
   self.tabBarController?.setViewControllers(controllerArray, animated: true)

  }


}
Run Code Online (Sandbox Code Playgroud)

但如果我注释掉其中一行,例如这样:

     //controllerArray.append(controller2)
Run Code Online (Sandbox Code Playgroud)

因此该控制器不属于controllersArray,该控制器仍显示在选项卡栏中。我究竟做错了什么?

我也尝试过这个,但它也不起作用:

 self.tabBarController?.viewControllers = controllerArray
Run Code Online (Sandbox Code Playgroud)

bey*_*ulf 5

说啊

self.setViewControllers(controllerArray, animated: true)
Run Code Online (Sandbox Code Playgroud)

代替

self.tabBarController?.setViewControllers(controllerArray, animated: true)
Run Code Online (Sandbox Code Playgroud)

您正在子类化 UITabBarController 而不是 UIViewController,因此您没有或至少不需要属性 tabBarController。