Próbuję zaimplementować interfejs użytkownika o strukturze podobnej do aplikacji Tweetie , która zachowuje się tak: kontroler widoku najwyższego poziomu wydaje się być kontrolerem nawigacji, którego głównym widokiem jest widok tabeli „Konta”. Kliknięcie dowolnego konta powoduje przejście do drugiego poziomu, na którym u dołu znajduje się pasek kart. Każdy element karty przedstawia inną listę i pozwala na dalsze drążenie w dół (kolejne poziomy nie pokazują paska kart).
Wygląda więc na to, że hierarchia implementacji jest następująca:
UINavigationController
- Konta :
UITableViewController
UITabBarController
- Tweety :
UITableViewController
- Szczegółowy widok tweeta / użytkownika / itp
- Odpowiedzi :
UITableViewController
- ...
- Tweety :
- Konta :
Wydaje się, że to działa [^ 1], ale wydaje się, że nie jest obsługiwane zgodnie z dokumentacją SDK dla -pushViewController:animated:
(podkreślenie dodane):
viewController : kontroler widoku, który jest wypychany na stos. Nie może być instancją kontrolera paska kart.
Chciałbym unikać prywatnych interfejsów API i tym podobnych, ale nie jestem pewien, dlaczego takie użycie jest wyraźnie zabronione, nawet jeśli wydaje się działać dobrze. Czy ktoś zna powód?
Myślałem o umieszczeniu kontrolera paska zakładek jako głównego kontrolera, z każdą zakładką zawierającą oddzielne kontrolery nawigacji. Problem polega na tym, że każdy kontroler nawigacyjny musi współdzielić jeden główny kontroler widoku (mianowicie tabelę „Konta” w Tweetie ) - to nie działa: przeniesienie kontrolera tabeli do drugiego kontrolera nawigacyjnego wydaje się go usuwać od pierwszego. Nie wspominając o całej księgowości przy wyborze innego konta prawdopodobnie byłoby uciążliwe.
Jak mam to zaimplementować we właściwy sposób?
[^ 1]: Kontroler paska kart musi mieć podklasę, aby element nawigacyjny kontrolera paska kart na tym poziomie pozostawał zsynchronizowany z elementem nawigacyjnym wybranej karty, a kontroler tabeli pojedynczej karty musi przesyłać odpowiednie widoki szczegółów do self.tabBarController.navigationController
zamiast self.navigationController
.