2012-04-04 8 views
0

Toute aide serait appréciée.Notez qu'une vue est chargée depuis l'extérieur d'un viewController

Je cherche un moyen de notifier par programme qu'une vue est chargée depuis l'extérieur de ce viewController. Disons que ma vue principale a 5 boutons, après le chargement de la vue et l'apparition des boutons je veux être averti dans un autre fichier (en dehors de ce viewController) qu'il est chargé. Comment/Où puis-je vérifier et être informé?

Dois-je effectuer une programmation orientée aspect?

+0

Est-ce possible de ne pas ajouter/modifier quoi que ce soit dans le code source de ce viewcontroller. Tous les changements de code que je veux faire suivre doivent être codés en dehors de viewController dans le fichier de contrôle. – ramo

+0

Vous pouvez faire de votre objet de contrôle un observateur d'un changement de propriété à l'intérieur d'un autre objet. Je me suis mis à jour répondre avec une explication. –

Répondre

2

Utilisez NSNotificationCenter. Vous pouvez communiquer entre les classes. Écoutez un NSNotification personnalisé à l'intérieur de votre autre objet.

0

Demandez à votre contrôleur de vue de publier cette notification pendant la partie de son cycle de vie la plus logique (viewDidLoad, viewDidAppear ...).

Si vous ne pouvez pas poster de notification, l'observation d'un chemin de clé pourrait être la solution. Par exemple, vous pouvez mettre quelque chose comme ceci dans votre objet de contrôle, puis mettre en œuvre observeValueForKeyPath::

[viewController addObserver:self 
       forKeyPath:@"view" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 
0

NSNotificationCenter ou une méthode de délégué est le moyen le plus approprié pour y parvenir.

0

Bien que vous puissiez le faire avec des notifications comme d'autres l'ont suggéré ou KVO, cela suggère fortement un problème de conception. Vous ne devriez jamais accéder directement aux vues internes d'un contrôleur de vue. Donc, la question plus profonde est: pourquoi voulez-vous savoir?

La cause la plus probable dans mon expérience est que vous laissez un autre objet définir les titres ou modifier activé. Cela brise MVC et conduit au genre de problèmes que vous essayez probablement de résoudre. La manière correcte de gérer cela consiste à placer les données dans un objet de modèle partagé entre les différents contrôleurs de vue. Le contrôleur de vue actuel peut alors observer les modifications sur le modèle et mettre à jour ses éléments d'interface utilisateur de manière appropriée.

+0

Je cherche un moyen de notifier par programme qu'une vue est chargée depuis l'extérieur de ce viewController. Je comprends que pour communiquer entre les classes je pourrais utiliser NSNotificationCenter, ou utiliser une méthode déléguée ou étiqueter la vue, etc. Mais je ne veux rien changer dans le code source du contrôleur de vue. Je veux qu'on dise sth comme la bibliothèque ou le framework pour gérer cela de l'extérieur. Toutes mes recherches jusqu'à présent ne sont pas si utiles, il semble qu'il y ait une programmation orientée aspect en Objective-C dont j'ai besoin de regarder. – ramo

+0

Pouvez-vous expliquer pourquoi vous voulez accéder aux informations privées d'un contrôleur de vue (ses vues, qu'il est seul responsable de la gestion)? Briser MVC aura tendance à vous mordre dans Cocoa. L'outil que vous utiliseriez ici est KVO (Key Value Observing), mais il suggère fortement un problème de conception. –

Questions connexes