TabBarController 不会更改选定的索引

TabBarController doesn't change selected index

我正在尝试将选定的 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            
     }    

    } 

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

请将其更改为 viewWillAppear 或 viewDidAppear 而不是 viewDidLoad。

更新: 这将不起作用,因为您的代码是在 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 :( ")
            }
        }

希望这会有所帮助:)