Dois-je vraiment utiliser addChildViewController lorsque j'ajoute une vue à une autre vue (et ces deux vues sont contrôlées par les controllers de vue)?

Je construis un UIViewController avec un XIB. Dans cette XIB, j'ai des espaces réservés (objects UIView dans le XIB) dans lesquels je place d'autres vues, à partir d'autres controllers de vue . (En passant, je pourrais également append ces vues directement, sans espace réservé)

Je ne suis pas en UINavigationController un controller de vue conteneur: je veux dire que ce n'est pas un UINavigationController . C'est juste un controller de vue "habituel". Imaginez par exemple que j'ai une petite sous-vue à mon avis pour un logo "Facebook" et un countur. Cette "vue facebook" est attachée à un autre controller de vue qui est appelé lorsque la "vue Facebook" est touchée. Donc, le "controller Facebook" doit absolument être une @property de mon controller "principal".

Dans cette situation, devrais-je vraiment utiliser addChildViewController: et tout le mécanisme? Ou pas?

Merci!

Vous ne devriez pas utiliser UIViewController simplement pour "pêcher" dans un file .xib pour que vous obteniez la vue. Si c'est tout ce que vous voulez, ne faites pas ça. Il suffit de charger la plume et de retirer la vue, directement:

 NSArray* objects = [[UINib nibWithNibName: @"MyNib" bundle: nil] instantiateWithOwner:nil options:nil]; UIView* v = (UIView*)[objects firstObject]; 

Mais si vous utilisez un UIViewController en conjonction avec ce file .xib pour une autre raison, par exemple pour le garder en vie afin qu'un button dans le .xib puisse envoyer des messages à ce UIViewController, alors vous devez absolument établir une relation parent-enfant correcte , comme je le décris dans mon livre: http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers

Oui tu devrais. Ce faisant, le controller de vue conteneur envoie les events de cycle de vie du controller de vue appropriés aux controllers de vue enfant.

Vous dites que vous n'êtes pas en train de build un controller de conteneur, mais vous l'êtes. L'ajout de la vue d'un autre controller de vue à un autre controller de vue est la définition d'un controller de vue de conteneur.

Reportez-vous à la section "Implémentation d'un controller de vue de conteneur" des documents pour UIViewController sur la séquence appropriée des appels de méthode que vous devez effectuer. C'est plus que d'appeler addChildViewController .

Vous pouvez instancier votre initié ViewController, et juste append sa vue (myInsiderViewController.view) à votre viewController principal:

 [mainViewController.view addSubView:myInsiderViewController.view];