34 votes

quand utiliser addChildViewController vs pushViewController

Je viens de regarder une de la WWDC 2011 présentation sur "la mise en Œuvre de UIViewController de Confinement" (ici est un lien vers la vidéo)

Ils ont mentionné ces deux façons d'ajouter viewControllers à l'écran, et j'aimerais avoir quelques éclaircissements sur les meilleures pratiques...

addChildViewController / removeFromParentViewController
utilisé avec un @property (nonatomic, readonly) NSArray *childViewControllers et [self transitionFromViewController:currentView toViewController:nextView duration: options: animations: completion:];

pushViewController: animé: / popViewControllerAnimated
ils ont vraiment rapidement écrémé passé, présent dans la présentation

Dans mes applications, j'utilise tous les viewControllers, et jusqu'à aujourd'hui, j'ai toujours géré avec:

[nextController performSelector:@selector(setDelegate:) withObject:self];
[currentPageController.view removeFromSuperview];
[self.view addSubview:nextController.view];

Mais je comprends maintenant que c'est une mauvaise pratique, et je me demande quelle est la bonne façon d'utiliser les "addChildViewController" et quelle est la façon correcte d'utiliser "pushViewController"?

J'apprécie vraiment vos pensées sur le sujet!

73voto

Dennis Bliefernicht Points 4149

Oui, pushViewController: est pour la navigation contrôleurs de gérer une pile de vue des contrôleurs. addChildViewController: sur l'autre main est une partie de l'iOS 5 fonctionnalité appelée "vue-contrôleur de confinement".

L'idée de base derrière cela est que vous pouvez incorporer à votre vue des contrôleurs dans les autres contrôleurs de vue de votre propre (par exemple, lors du portage d'un iPhoen app pour l'iPad) et donc facilement faire votre propre mise en œuvre de choses comme les manettes de navigation, split view contrôleurs etc.

Un problème avec une application comme celle que vous montrez c'est que vous n'poignée de points de vue. - Vue-contrôleur des événements comme les changements d'orientation ne seront pas transmises correctement le bas de la hiérarchie. - Vue-contrôleur de confinement essaie de faire en sorte que tous les contenus vue contrôleurs d'obtenir les messages, trop.

En regardant votre application, vous devez également penser à ce que vous voulez vraiment atteindre par ce. Une manette de navigation peut être la bonne chose, ou vous pouvez même montrer le contrôleur suivant modal (voir http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html) Un bonus lors de l'utilisation de ces méthodes (par exemple, les contrôleurs de la navigation et de modal points de vue) est que l'utilisateur est déjà familiarisé avec ces techniques de navigation.

En tout cas http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html est une bonne lecture sur la façon de faire la transition entre la vue des contrôleurs.

Lors de l'utilisation de-vue-contrôleur de confinement en gros, vous devez ajouter l'affichage de la vue, comme d'habitude (ce qui doit être fait, même si le contrôleur est ajouté). Ensuite, vous utilisez addChildViewController: d'ajouter de l'enfant-vue-contrôleur de environnants un. Vous devez également aviser le contrôleur enfant en didMoveToParentViewController: qu'il a été mis dans un autre contrôleur. Vous pouvez également utiliser transitionFromViewController:toViewController: d'échanger un point de vue contrôleur pour une autre, éventuellement en donnant une animation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X