7
votes

Y a-t-il une meilleure façon? Délégué -> Délégué -> Délégué

J'ai une vue qui charge une vue, qui doit appuyer sur la visualisation du contrôleur de navigation principal.

J'ai configuré un délégué pour chaque vue et appelle essentiellement mon appel à la suite de la "chaîne" au contrôleur de navigation principal.

Cela fonctionne, mais je suis curieux s'il y a une meilleure façon (plus facile?) pour y parvenir?


0 commentaires

3 Réponses :


-1
votes

Selon la manière dont vous avez configuré votre programme, si votre délégué de l'application contient un uinavigationController code>, vous pouvez accéder au contrôleur de navigation de n'importe où:

[[[NSApp delegate] navigationController] pushViewController: myVC animated:YES];


1 commentaires

POUAH. J'ai donc corrigé les fautes de frappe. Je passe entre Mac OS et la programmation iOS trop souvent.



7
votes

Vous pouvez utiliser le NSNOTIFICATIONCENTER Pour envoyer un message que votre navigationController répondra à.

Dans votre vue qui doit appeler la navigationController, vous écririez quelque chose comme: xxx

@ "dowork" est le nom unique (le plus probable) message à laquelle un autre objet répondra.

et dans votre navigationController, vous devez ajouter un observateur à pouvoir pouvoir être capable. Pour attraper cette notification, comme: xxx

@Selector (dowork) est le sélecteur que vous souhaitez effectuer lorsque la notification est affichée et @ "dowork" est la notification que vous souhaitez répondre à.


2 commentaires

Y a-t-il un moyen de faire la même chose si vous n'avez pas de navigationController? J'ai essayé d'ajouter notifididiformation à mon premier VC, puis appelle la Dowork d'un autre VC, mais elle écrasera l'application (sélecteur non reconnu envoie à ...). Donc, je suppose que ce que vous décrivez ici dépend de l'utilisation d'une carte de navigation?


@ N.EvertiMind: nsnotificationCenter ne s'appuie pas à l'aide d'un contrôleur de navigation. Peut-être devriez-vous créer une nouvelle question afin que nous puissions résoudre votre problème.



2
votes

Vue donc une vue de charges B. Plus tard, Afficher la vue B Charges C et souhaite appuyer sur son contrôleur d'affichage sur le contrôleur de navigation en amont de la vue B? Voir comme? Voir le contrôleur.

Vue fournie B a un contrôleur d'affichage qui fait partie de la pile de navigation, puis son contrôleur d'affichage peut saisir le contrôleur de navigation, quelle que soit la distance dans la pile, via [auto NavigationController] .

Les vues n'ont pas de pointeur à leur contrôleur, mais si vous vouliez totalement casser MVC, vous pourriez avoir le contrôleur le fixer lui-même. La meilleure approche consisterait à que le contrôleur reçoive l'action du robinet (ou quoi qu'il s'agisse de la mise en charge et de la reproduction de la vue C), puis de la manipuler le contrôleur d'affichage de l'échange. Par exemple, si la vue B est une vue de table, vous définiriez son contrôleur d'affichage comme le utableviewelegate de sorte qu'il puisse gérer la sélection d'une ligne en appuyant sur un nouveau contrôleur de vue.

Votre question semble indiquer que vous ne distinguez pas entre une vue, son contrôleur d'affichage, un contrôleur de navigation et la vue qui est affichée dans la région de contenu du contrôleur de navigation. Tous ces objets jouent un rôle différent. Il vous rembourserait de manière plus étroitement et leurs interrelations avant de continuer à développer votre demande.


0 commentaires