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

标签 ios swift uitabbarcontroller 3dtouch

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

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

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

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

}

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

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
}

关于ios - 无法使用 self.tabBarController?.selectedIndex 更改选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096855/

相关文章:

iphone - 定义屏幕宽度常量

ios - 我可以通过外部计费绕过 Apple 的应用内购买机制吗?

ios - 在静态库中获取设备 token

ios - 在 Swift 中从一个 SKScene 调用方法到另一个 SKScene 的最干净的方法是什么?

UIViewController.presentViewController 中的 iOS 崩溃

swift - 如何修复 Mac 项目中的 main.swift?

iphone - 具有滑动效果的 Tabbar Controller

iphone - 如何从 View Controller 引用应用程序委托(delegate)中的 ManagedObjectContext?

ios - didSelectViewController 在某些情况下不会被调用

xcode - Swift:为什么这个有效的表达式在以三元形式表示时会失败?