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

时间:2016-01-30 01:14:54

标签: ios swift uitabbarcontroller 3dtouch

我的应用已嵌入TabBarController,我正在尝试从ViewController切换所选标签。

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

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

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

}

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

  

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

        }
    }
}

2 个答案:

答案 0 :(得分:3)

您只需在viewDidLayoutSubviews内而不是viewDidLoad内拨打电话,并在调用时使用tabBarController。您还应该使用guard来打开它:

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

答案 1 :(得分:0)

更容易

def shuffle():
    randomlength = randint(8, 12)
    pre = {0: '', 1:'',2:'',3:''}
    lists = {0: Upperletters, 1: Lowerletters, 2: Symbols, 3: Numbers}
    for x in range(4): pre[x]+=(choice(lists[x]))
    for i in range(randomlength-4):
        x = randint(1, 74)
        if x < 27: pre[0]+=choice(lists[0])
        elif x < 53: pre[1]+=choice(lists[1])
        elif x < 65: pre[2]+=choice(lists[2])
        else: pre[3]+=choice(lists[3])
    pw = ''
    for v in pre.values():
           pw += v
    return pw
print(shuffle())