Dans la WWDC 2011 Session 102, Apple a introduit la-Vue-Contrôleur de Confinement, qui est la capacité à créer un affichage personnalisé contrôleur de conteneurs, analogue à UITabBarController, UINavigationController, et la comme.
J'ai regardé les exemples plusieurs fois. Il y a une foule de méthodes associées à ce modèle, mais il était un peu dur à comprendre exactement. Je vais les poster ici, je pense que ce qui se passe et voir si la communauté ne permet de confirmer ou disconfirm mes soupçons.
Scénario 1: le passage de la pas de parent à parent-vue-contrôleur
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
Faire les deux premières lignes ont à se produire dans l'ordre donné, ou peut-il être inversé?
Scénario 2: Déplacement d'un parent-vue-contrôleur à aucun parent-vue-contrôleur
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
Il est également nécessaire de faire appel [vc didMoveToParentViewController:nil]
? Les exemples de la Session 102 ne l'a pas fait dans ce scénario, mais je ne sais pas si c'était une omission ou pas.
Scénario 3: le passage de l'un des parents-vue-contrôleur à l'autre
Ceci risque de se produire de la manière suivante, parce que la logique de chaque parent-vue-contrôleur sera encapsulé.
// In the old parent
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
// In the new parent
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];
Questions
Ma principale question est celle-ci: Est-ce de cette manière-vue-contrôleur de confinement doit travailler, en général? Sont la mécanique donnée ci-dessus est correcte?
Est-il nécessaire de convoquer willMoveToParentViewController
avant d'appeler addChildViewController
? Cela semble logique pour moi, mais est-il absolument nécessaire?
Est-il nécessaire de convoquer didMoveToParentViewController:nil
après l'appel de removeFromParentViewController
?