Załóżmy, że mam UIButton
widok jednej karty w mojej aplikacji na iPhone'a i chcę, aby otwierał inną kartę na pasku kart w TabBarController
. Jak napisałem kod, aby to zrobić?
Zakładam, że wyładowuję istniejący widok i ładuję określony widok karty, ale nie jestem pewien, jak dokładnie napisać kod.
iphone
objective-c
ios
uitabbarcontroller
rottendevice
źródło
źródło
Odpowiedzi:
Wypróbuj ten kod w języku Swift lub Objective-C
Szybki
Cel C
źródło
-setSelectedViewController:
.Zwróć uwagę, że zakładki są indeksowane począwszy od 0. Tak więc działa następujący fragment kodu
przechodzi do piątej zakładki w pasku.
źródło
Moim zdaniem
selectedIndex
lub używanieobjectAtIndex
niekoniecznie jest najlepszym sposobem na zmianę karty. Jeśli zmienisz kolejność kart, wybór indeksu zakodowanego na stałe może zepsuć poprzednie zachowanie aplikacji.Jeśli masz odniesienie do obiektu kontrolera widoku, do którego chcesz się przełączyć, możesz wykonać:
Oczywiście musisz się upewnić, że
myViewController
naprawdę znajduje się na liścietabBarController.viewControllers
.źródło
Możesz po prostu ustawić
selectedIndex
właściwość w UITabBarController na odpowiedni indeks, a widok zostanie zmieniony tak, jak użytkownik dotknął przycisku karty.źródło
selectedIndex
również nie działa dla mnie z indeksami> 4, aleselectedViewController
działa.Wypróbowałem to, co zasugerowało Disco S2, było blisko, ale tak się skończyło. Zostało to wywołane po wykonaniu czynności w innej karcie.
źródło
W przypadkach, w których możesz przenosić karty, oto kod.
źródło
Podobnie jak rozwiązanie Stuarta Clarka, ale dla Swift 3:
Użyj tego w ten sposób:
Zwróć uwagę, że mój tabController łączy do viewControllers za navigationControllers. Bez navigationControllers wyglądałoby to tak:
źródło
Chciałem móc określić, która karta jest wyświetlana według klasy, a nie indeksu, ponieważ uważałem, że jest to solidne rozwiązanie, które jest mniej zależne od sposobu okablowania IB. Nie znalazłem rozwiązania Disco ani Jopeda do działania, więc stworzyłem tę metodę:
nazywasz to tak:
Mam nadzieję, że to komuś pomoże
źródło
Mój problem jest trochę inny, muszę przełączyć się z jednego childViewController w 1. tabBar na home viewController 2. tabBar. Po prostu korzystam z rozwiązania znajdującego się na piętrze:
Jednak po przełączeniu na stronę główną drugiego tabBar zawartość jest niewidoczna. A kiedy debuguję, viewDidAppear, viewWillAppear, viewDidLoad, żaden z nich nie jest wywoływany. Moje rozwiązanie polega na dodaniu następującego kodu w UITabBarController:
źródło
Użyj w
AppDelegate.m
pliku:źródło
Podobnie jak rozwiązanie Stuarta Clarka, ale dla Swift 3 i używając identyfikatora przywracania, aby znaleźć właściwą kartę:
Użyj go w ten sposób („Ludzie” i „Roboty” muszą być również ustawione w scenorysie dla określonego kontrolera widoku i jego identyfikatora przywrócenia lub użyj identyfikatora scenorysu i zaznacz „użyj identyfikatora scenorysu” jako identyfikatora przywrócenia):
Zwróć uwagę, że mój tabController łączy do viewControllers za navigationControllers. Bez navigationControllers wyglądałoby to tak:
źródło
źródło