无法使用 self.tabBarController?.selectedIndex 更改选项卡

Unable to change tab using self.tabBarController?.selectedIndex

我的应用程序嵌入在 TabBarController 中,我正在尝试从 ViewController 中切换所选选项卡。

通过以下几行,我希望找出该功能是否有效,不幸的是它没有,但我不确定为什么,任何人都可以帮助我哪里出错了?

func tabbar() { self.tabBarController?.selectedIndex = 4 }

override func viewDidLoad() {
    super.viewDidLoad()
    tabbar()

}

PS:我测试这个的原因是因为我想知道以下是否适用于我的 3DTouchShortcuts。我知道 3D Touch 快捷方式出现并打开初始视图控制器,我希望每种情况的以下行实际上会使快捷方式打开到不同的选项卡。

tababarController.selectedIndex = 1

private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {

     if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
        let tabbarController = rootViewController as! UITabBarController

        switch shortcutItemType {
        case .AddItem:
            NSNotificationCenter.defaultCenter().postNotificationName("performsegueAddItem", object: nil)
            tabbarController.selectedIndex = 1
            break
        case .FavouritesTab:
            tabbarController.selectedIndex = 2
            break

        }
    }
}

你只需要在 viewDidLayoutSubviews 中调用它而不是 viewDidLoad 并且你应该在调用它时使用 tabBarController 。您还应该使用 guard 来解包它:

override func viewDidLayoutSubviews() {
    guard let tabBarController = tabBarController else { return }
    tabBarController.selectedIndex = 0
}

更容易

override func viewWillAppear(_ animated: Bool) {
    self .selectedIndex = 2 // desired index
}