2015-01-22 11 views
26

Mam aplikację paska kart i mam przycisk na moim pierwszym widoku, który chcę, gdy naciśnięty przełącznik na mojej drugiej karcie programowo w pasku kart.Przełączanie paska zakładek programowo w Swift

Nie mogę się chyba domyślić, jak uzyskać indeks itp., Aby przejść do niego Próbowałem już takich rzeczy.

tababarController.selectedIndex = 1 

Bez powodzenia.

Odpowiedz

80

Ów dość prosta TabBarController jest zadeklarowana jako opcjonalny typu

var tabBarController: UITabBarController? { get } 

Najbliższy przodek w widoku kontrolera hierarchii, która jest pasek kart kontroler. Jeśli kontroler widoku lub jeden z jego przodków jest potomkiem kontrolera paska kart, ta właściwość zawiera kontroler paska posiadania będący właścicielem: . Ta właściwość jest zerowa, jeśli kontroler widoku nie jest wbudowany w kontrolkę paska kart.

Po prostu trzeba dodać "?" na koniec:

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

Słodkie dziękuję tak bardzo byłem blisko ahaha – Azabella

+1

Serdecznie zapraszamy –

+0

Próbowałem powyższego to nie zadziałało. :(Czy możesz pomóc? – vinbhai4u

2

Rozwiązanie dostarczone przez Leo Dabus (patrz wyżej) działa dobrze dla mnie. Jednak niektóre kontrolki mają złe stany. nie można naprawić, ale to trochę obejście zrobi Ci wszystko dobre: ​​

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

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

rzeczywiście miał bardzo podobny problem.Stanu' UITableView' nie została zmieniona, nawet 'tableView.reloadData()' został wywołany. za zapewnienie obejścia, czy prawdopodobnie masz do czynienia z rozumowaniem lub lepszym rozwiązaniem? –

+0

@ MarcinŚwierczyński, niestety - nie. Napisz do mnie, jeśli będziesz ... –

0

Dodaj do Antoniego kodu:

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

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

gdzie klasa wybierak został zmieniony na

#selector(switchToDataTabCont) 
5

Zaktualizowano odpowiedź Anthony'ego na Swift3

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

func switchToDataTabCont(){ 
    tabBarController!.selectedIndex = 0 
} 
Powiązane problemy