2010-09-23 4 views
0

Ma question concerne la meilleure façon d'implémenter le transfert d'informations entre les contrôleurs UIView.méthodes d'appel à travers les contrôleurs de vue

Si j'ai une application avec 2 ViewControllers et par exemple un utilisateur sélectionne un élément dans ViewControllerA qui devrait alors afficher l'élément et plus de détails dans ViewControllerB.

Quelle serait la meilleure façon de l'implémenter? via l'appdelegate? ou en passant une référence à ViewControllerA dans ViewControllerB? Appréciez toute aide ou des exemples de la meilleure façon de le faire.

+0

duplication possible de [méthode Invoke dans une autre classe] (http: // stackoverflow .com/questions/1186620/invoke-method-dans-une-autre-classe) –

Répondre

1

ViewControllerA (VCA) maintient une référence à ViewControllerB (VCB). VCB conserverait une référence à l'objet sélectionné en tant que ivar. Lorsque l'utilisateur choisit un objet dans VCA, VCA instancie VCB (s'il n'est pas déjà instancié), définit la propriété selectedObject de VCB sur cet objet, puis pousse VCB. VCB lit à partir de l'objet affecté à sa propriété selectedObject pour dessiner ses informations dans la vue.

Dans VCA, pour chacun des «éléments» que l'utilisateur peut sélectionner, une instance d'objet sous-jacente doit être sauvegardée sur cet élément. Par exemple, un UITableView peut être soutenu par un NSArray d'objets végétaux si l'utilisateur sélectionne dans une liste de légumes.

En général, essayez de limiter le partage de données entre les contrôleurs. Demandez-leur de se référer aux objets du modèle à la place pour obtenir leurs données.

+0

merci alexantd, va l'essayer et voir comment ça se sent. – kevj

0

Essayez d'utiliser le motif de conception MVC. Placez toutes les informations d'état partagées dans un objet Modèle (M de MVC) créé à un niveau supérieur ou supérieur de votre application. Lorsque vous créez vos deux contrôleurs de vue, donnez-leur accès à l'objet modèle (en définissant une propriété dans chaque contrôleur de vue). Ensuite, les contrôleurs de vue peuvent stocker et accéder à tout état partagé requis, et le centraliser pour le débogage, le stockage, l'extensibilité, la réutilisation, etc.

+0

merci hotpaw2, cela a du sens, va l'essayer. – kevj