2009-10-03 8 views
4

J'ai un contrôleur de vue (A) qui charge un contrôleur de vue (B) et utilise sa vue dans ma hiérarchie de vue. Si j'ajoute la vue de B à la hiérarchie de vue de A, et que je ne transfère pas manuellement des événements comme viewWillAppear, je ne peux pas les gérer dans le contrôleur B. (De l'viewWillAppear: docs)Quelle est la bonne façon d'ajouter un contrôleur de vue à la hiérarchie de vue?

Avertissement: Si la vue appartenant à un contrôleur de vue est ajoutée à une vue hiérarchie directe, le contrôleur vue ne recevra pas ce message . Si vous insérez ou ajoutez une vue à la hiérarchie de vue, et qu'elle a un contrôleur de vue , vous devez envoyer le contrôleur de vue associé directement à ce message . A défaut d'envoyer le contrôleur de vue , ce message empêche l'affichage de toute animation associée de .

Quelle est la bonne façon d'imbriquer les contrôleurs de vue? (Comme NavBarController le fait.) S'il s'agit juste de devoir transférer un groupe d'événements au contrôleur imbriqué, quels sont tous les événements que je dois transférer?

Répondre

4

Il n'y a pas de solution magique ici. La solution correcte consiste à envoyer manuellement ces messages. ViewWillAppear:/viewDidAppear: et viewWillDisappear:/viewDidDisappear: les messages sont les seuls messages que vous devez envoyer manuellement au contrôleur de vue enfant.

Vous devez implémenter ces quatre méthodes dans le contrôleur de vue parent et envoyer le même message au contrôleur de vue enfant chaque fois que le parent reçoit le message et que le fils est chargé.

En outre, lorsque vous ajoutez l'affichage du contrôleur de vue enfant, vous devez envoyer les messages viewWillAppear:/viewDidAppear: si la vue view.window du parent est non nulle. Lorsque vous supprimez la vue, vous devez envoyer les messages viewWillDisappear:/viewDidDisappear: si la vue view.window du parent est non nulle.

Questions connexes