Kiedy używać addChildViewController vs pushViewController
Właśnie obejrzałem prezentację 2011 WWDC
na temat "Implementing UIViewController Containment" ( Oto link do filmu )
Wspomniali o obu tych sposobach dodawania kontrolerów viewcontrollerów do ekranu i byłbym wdzięczny za Wyjaśnienie najlepszych praktyk...
AddChildViewController / removeFromParentViewController
używane z właściwością @(nonatomic, readonly) NSArray *childViewControllers i [self transitionFromViewController:currentView toViewController:nextView duration: options: animations: completion:];
PushViewController: animowane: / popViewControllerAnimated
bardzo szybko przejrzeli to w prezentacji
W moich aplikacjach używam wszystkich niestandardowych kontrolerów viewcontrollerów i do dziś zawsze zarządzałem nimi za pomocą:
[nextController performSelector:@selector(setDelegate:) withObject:self];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];
Ale teraz rozumiem, że jest to zła praktyka i zastanawiam się, jaki jest poprawny sposób użycia "addChildViewController" i jaki jest poprawny sposób użycia "pushViewController"?
Naprawdę doceniam twoje przemyślenia w tej sprawie!
1 answers
Tak, pushViewController:
jest dla kontrolerów nawigacyjnych, które zarządzają stosem kontrolerów widoku. addChildViewController:
z drugiej strony jest częścią funkcji iOS 5 o nazwie "kontroler widoku".
Podstawową ideą jest to, że możesz osadzić swoje Kontrolery widoku w innych kontrolerach widoku własnych (np. podczas przenoszenia aplikacji na iPhone ' a na iPada) i w ten sposób łatwo wykonać własną implementację takich rzeczy, jak kontrolery nawigacji, Kontrolery podzielonego widoku itp.
Jeden problem z implementacja taka jak ta, którą pokazujesz, polega na tym, że obsługujesz tylko widoki. Zdarzenia kontrolera widoku, takie jak zmiany orientacji, nie będą prawidłowo przekazywane w dół hierarchii. Kontrola kontrolera widoku stara się zapewnić, że wszystkie zawarte Kontrolery widoku również otrzymają odpowiednie komunikaty.
Patrząc na twoje wdrożenie, powinieneś również pomyśleć o tym, co naprawdę chcesz przez to osiągnąć. Kontroler nawigacyjny może być właściwą rzeczą lub możesz nawet pokazać następny kontroler modalnie (zobacz https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PresentingaViewController.html) dodatkową korzyścią przy stosowaniu tych metod (np. kontrolerów nawigacji i widoków modalnych) jest to, że użytkownik jest już zaznajomiony z tymi technikami nawigacji.
W każdym przypadku https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/{[13] } jest dobrą lekturą na temat przejścia między kontrolerami widoku.
Podczas stosowania widok Controller containers w zasadzie musisz dodać widok do widoku zawierającego jak zwykle (należy to zrobić nawet jeśli kontroler został dodany). Następnie używasz addChildViewController:
, aby dodać kontroler widoku podrzędnego do otaczającego. Musisz również powiadomić kontroler potomny przez didMoveToParentViewController:
, że został on umieszczony w innym kontrolerze. Możesz również użyć transitionFromViewController:toViewController:
do wymiany jednego kontrolera widoku na inny, opcjonalnie dając animację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-02 07:07:38