2013-03-03 1 views
3

Je suis confronté à une situation étrange. J'ai un NSMenu avec un sous-menu dedans. Le contenu du sous-menu est renseigné par programme. Dans ma méthode validateMenuItem:, je peux voir tous les éléments vérifiés (les éléments du parent) ainsi que les sous-éléments (une fois que je clique sur un sous-menu), à l'exception de ceux de mon sous-menu auto-rempli.validateMenuItem: pas appelé

Pourquoi est-ce? Est-ce que je fais quelque chose de mal? Des idées sur la façon de résoudre ce problème?

+0

Et ces éléments de menu fonctionnent normalement autrement (c'est-à-dire quand vous les sélectionnez, ils déclenchent leur méthode d'action)? – trojanfoe

+0

@trojanfoe Je viens de trouver la réponse (assez simple pour être honnête ...) - Je vais poster tout de suite. –

+0

@trojanfoe Toutes les actions des éléments de menu ont été implémentées dans le contrôleur, tandis que les actions des sous-éléments d'un sous-menu spécifique ne l'étaient pas. Ainsi, la méthode 'validateMenuItem:' ne devait pas être appelée. (Frustrant ... étant donné que je me débattais avec ça 2 heures avant de le poster en SO (et de le répondre moi-même après 10 minutes ... lol)) –

Répondre

11

est la solution ici:

cacao cherche la méthode validateMenuItem: dans la classe où le sélecteur d'action de NSMenuItem est.

Donc, si votre sélecteur d'action s » de NSMenuItem (par exemple @selector(someSelector:)) est mis en œuvre SomeClass, alors assurez-vous que vous avez une méthode validateMenuItem: dans SomeClass aussi, si vous voulez valider les éléments de menu correspondants.

+1

Ne ciblez-vous pas le * premier répondant * de votre action? – trojanfoe

+0

@trojanfoe Non, je ne le suis pas. Toutes les actions sont liées à des classes spécifiques. Devrais-je cibler le premier répondant? –

+0

Je suppose que cela dépend de l'application, mais dans mon application basée sur les documents, j'ai tous les menus ciblant * Premier répondant * Je pense. – trojanfoe