0 votes

Accès à d'autres vues sur la pile de navigation

J'ai donc un UINavigationController qui, évidemment, contient tous mes ViewControllers.

J'en ai trois.

Racine->View2->View3.

Je me demandais donc si ce qui suit était possible...

Lorsque je suis dans la vue 3 (et qu'une instance de Root et de View2 se trouvent sur la pile de navigation), puis-je appeler une des méthodes de View2 ou de la vue Root ou leur envoyer des messages ?

Si oui, comment s'y prendre ? Je peux poster un exemple de code si nécessaire.

Merci,

Jon

4voto

Jason Coco Points 52303

En supposant que vous êtes dans l'un des contrôleurs de vue, vous pouvez faire quelque chose comme ceci :

UIView* view2    = [self.navigationController.viewControllers objectAtIndex:1];
UIView* rootView = [self.navigationController.viewControllers objectAtIndex:0];

Maintenant, vous pouvez leur envoyer les messages que vous voulez.

2voto

Amagrammer Points 5064

Les NSNotification fonctionnent très bien pour les objets que vous souhaitez coupler de manière souple. Dans un contexte Cocoa/iPhone, cela signifie qu'il n'y a pas de références entre eux, la plupart du temps.

Dans le contrôleur qui peut recevoir le message :

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(doTheThing:) name: @"MessageBetweenControllers" object: nil];

Dans le contrôleur qui doit envoyer le message :

NSDictionary *dict = [NSDictionary dictionaryWithObject: <some object> forKey: @"key"];
[[NSNotificationCenter defaultCenter] postNotificationName: @"MessageBetweenControllers" object: self userInfo: dict];

L'exemple ci-dessus n'est qu'un modèle (par exemple, le bit NSDictionary est facultatif), mais il montre le mécanisme. Lisez la documentation sur NSNotification et NSNotificationCenter pour obtenir les détails.

Ce n'est pas purement théorique. C'est la principale méthode que j'utilise pour la communication inter-objets dans mes trois applications publiées et dans ma nouvelle application. L'overhead pour les notifications est minuscule.

Deux problèmes : Assurez-vous que vous n'ajoutez un observateur qu'une seule fois par message - le NSNotificationCenter n'élimine pas les doublons ; si vous insérez le même observateur deux fois, il recevra le message deux fois. De même, assurez-vous que vous faites removeObserver dans votre méthode dealloc (encore une fois, consultez la documentation).

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