2015-01-22 4 views
26

Ich habe eine Tab-Leiste-Anwendung, und ich habe eine Schaltfläche in meiner ersten Ansicht, die ich beim Drücken auf meine zweite Registerkarte programmgesteuert in der Tab-Leiste wechseln möchte.Switch Tab-Leiste programmgesteuert in Swift

Ich kann nicht ganz scheinen, es herauszufinden, wie man den Index usw., um es zu wechseln, habe ich Zeug wie diese versucht.

tababarController.selectedIndex = 1 

Mit keinem Erfolg.

Antwort

80

Das ist ziemlich einfach TabBarController wird als optionaler Typ deklariert

var tabBarController: UITabBarController? { get } 

Der nächste Vorfahr im View-Controller-Hierarchie, die eine Registerleiste Controller ist. Wenn der Ansichtscontroller oder einer seiner Vorgänger ein untergeordneter eines Registerkartencontrollers ist, enthält diese Eigenschaft die Eignerregisterkarte Controller. Diese Eigenschaft ist null, wenn der View-Controller nicht innerhalb eines Tab-Bar-Controllers eingebettet ist ( ).

Sie müssen nur "?" am ende:

@IBAction func goToSecond(sender: AnyObject) { 
    tabBarController?.selectedIndex = 1 
} 
+0

Süß danke so sehr, ich war in der Nähe ahaha – Azabella

+1

Sie sind willkommen –

+0

Ich versuchte das oben, es hat nicht funktioniert. :(Können Sie bitte helfen? – vinbhai4u

2

Die Lösung von Leo Dabus (siehe oben) funktioniert gut für mich. Jedoch - einige Kontrollen haben schlechte Zustände. Kann das nicht beheben, aber diese kleine Abhilfe erhalten Sie alle gut tun:

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

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

Ich habe eigentlich sehr ähnliche Problem. Der' UITableView' Zustand wurde nicht geändert, auch die 'tableView.ReloadData()' wurde aufgerufen für die zur Verfügung stellen der Workaround! Haben Sie wahrscheinlich in der Begründung hinter sich oder eine bessere Lösung? –

+0

@ MarcinŚwierczyński, leider - nicht. Bitte schreiben Sie mir, wenn Sie ... –

0

In den Anthony Code:

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

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

Wo die Auswahl Klasse wurde in

geändert
#selector(switchToDataTabCont) 
5

Anthonys Antwort für Swift3 aktualisiert

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

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