选项卡栏上的选定索引在 Swift 上不起作用

Selected Index on Tab Bar not working on Swift

我想通过 selectedIndex 更改 UITabBar / UITabBarController 的默认选定视图控制器。

我尝试了在其他线程中看到的其他解决方案,例如在 AppDelegateViewDidAppear 中更改它,如下所示:

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setupTabBar()
    }


    override func viewDidAppear(_ animated: Bool) {
        // this is the attempt to set the selected index that doesn't work 
        self.tabBarController?.selectedIndex = 2
    }

    func setupTabBar(){
        let vc1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mainvc")
        let vc2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "secondvc")
        let vc3 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "thirdvc")
        let FirstController = UINavigationController(rootViewController: vc1)
        let SecondController = UINavigationController(rootViewController: vc2)
        let ThirdController = UINavigationController(rootViewController: vc3)

        viewControllers = [FirstController, SecondController, ThirdController]
    }

}

到目前为止没有任何效果,它始终显示所选索引 = 0。

我在Main storyboard中将标签栏视图控制器设置为初始视图控制器。我应该在 AppDelegate 中执行此操作吗?

你是说

class MainTabBarController: UITabBarController {

所以self指的是一个UITabBarController,但是你设置的是tabBarControllerofself的选择索引:

self.tabBarController?.selectedIndex = 2

self 中没有嵌入标签栏控制器。 self 本身 一个标签栏控制器!你可以只设置 self.selectedIndex:

self.selectedIndex = 2

此外,您应该在 viewDidLoad 而不是 viewDidAppear 中执行此操作,因为 viewDidAppear 可能会发生很多次(例如,每次关闭某个模态控制器时)。 viewDidLoad只会调用一次。