web-dev-qa-db-fra.com

Basculer la barre d’onglet par programme dans Swift

J'ai une application de barre de tabulation et j'ai un bouton sur ma première vue que je veux appuyer sur pour basculer vers mon deuxième onglet par programme dans la barre de tabulation.

Je n'arrive pas à comprendre comment obtenir l'index, etc., pour y basculer. J'ai essayé des choses comme celle-là.

tababarController.selectedIndex = 1

Sans succès.

44
Azabella

C'est très simple, tabBarController est déclaré comme type optionnel

var tabBarController: UITabBarController? { get }

L'ancêtre le plus proche dans la hiérarchie du contrôleur de vue, à savoir un contrôleur de barre d'onglets. Si le contrôleur de vue ou l'un de ses ancêtres est un enfant d'un contrôleur de barre d'onglets, cette propriété contient le contrôleur propriétaire de la barre d'onglets. Cette propriété est nil si le contrôleur de vue n'est pas incorporé dans un contrôleur de barre d'onglets.

Donc, vous avez juste besoin d'ajouter "?" à la fin de celui-ci:

@IBAction func goToSecond(_ sender: Any) {
    tabBarController?.selectedIndex = 1
}
102
Leo Dabus

Swift 3:

func switchToDataTab() {
    Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
}

func switchToDataTabCont(){
    tabBarController!.selectedIndex = 0
}

Swift 4+:

func switchToDataTab() {
        Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
    }

@objc func switchToDataTabCont(){
        tabBarController!.selectedIndex = 0
    }
8
Darryl Lopez

La solution fournie par Leo Dabus (voir ci-dessus) me convient parfaitement. Cependant - certains contrôles ont de mauvais états. Vous ne pouvez pas résoudre ce problème, mais cette solution de contournement vous fera du bien:

func switchToDataTab(){
    NSTimer.scheduledTimerWithTimeInterval(0.2,
        target: self,
        selector: "switchToDataTabCont",
        userInfo: nil,
        repeats: false)
}

func switchToDataTabCont(){
    tabBarController!.selectedIndex = 0
}
4
Anthony Akentiev

Ajouter au code d'Anthony:

func switchToDataTab(){
    NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil,repeats: false)
}

func switchToDataTabCont(){
    tabBarController!.selectedIndex = 0
}

Lorsque la classe de sélecteur a été changée en

#selector(switchToDataTabCont)
2
dnaatwork.com