TabBarController不会更改所选索引

时间:2017-11-02 16:33:10

标签: ios swift uitabbarcontroller ios11 swift4

我正在尝试将选定的tabBarItem(和Controller)从索引1更改为索引0.

这是我的代码:

  override func viewDidLoad() {

    super.viewDidLoad()
    self.tabBarController?.delegate = self


    if UserDefaults.standard.double(forKey: "is_logged") !=  1 {
        // print always selectedIndex= Optional(0)
        print("selectedIndex= \(self.tabBarController?.selectedIndex)")
        self.tabBarController?.selectedIndex = 0            
     }    

    } 

2 个答案:

答案 0 :(得分:1)

我不确定您为什么要在viewcontroller viewdidload中更改selectedIndex。因为它还会显示选定的索引视图控制器。

请在viewWillAppear或viewDidAppear中更改viewDidLoad。

答案 1 :(得分:1)

更新:这不起作用,因为您的代码是在tabbarController的第二个(1索引)控制器中编写的。 UITabBarController仅在启动时加载第一个(0索引)控制器。

最好的方法是在UITabBarController中控制这个UITabBarController的创建子类,并在它的viewWillAppear中执行这样的操作。

 /* viewWillAppear of TabBarController */
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        /* Check if user logged in */
        if UserDefaults.standard.double(forKey: "is_logged") !=  1 {

            // Select first index
            self.selectedIndex = 0
        } else {
            /* User not logged in */

            // Select second index
            self.selectedIndex = 1
        }
        //Current selected index
        print("selectedIndex = \(String(describing: self.selectedIndex))")
    }

如果你想在viewController中执行此操作,那么在第一个控制器的viewWillAppear中执行如下所示的操作

代码已更新

 /* viewWillAppear of FirstViewController */
        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)

            // check tabBarController is not nil
            if self.tabBarController != nil {

                /* Check if user logged in */
                if UserDefaults.standard.double(forKey: "is_logged") !=  1 {

                    // Select first index
                    self.tabBarController?.selectedIndex = 0

                } else {
                    /* User not logged in */

                    // Select second index
                    self.tabBarController?.selectedIndex = 1
                }
                //Current selected index
                print("selectedIndex = \(String(describing: self.tabBarController?.selectedIndex))")
            } else {
                print("tabBarController is nil :( ")
            }
        }

希望这会有所帮助:)