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!

Author: Forge, 2011-11-10

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ę.

 73
Author: Dennis Bliefernicht,
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