无法使用 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
}
我的应用程序嵌入在 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
}