2010-11-04 35 views
1

Dans une application basée sur un document Cocoa, quelle est la meilleure façon de conserver les états des éléments de menu dans la barre de menus en synchronisation avec le document actuellement visible? Par exemple, supposons que vous ayez un document avec une vue de règle qui peut être masquée/affichée via les éléments de menu "Afficher les règles" (état désactivé) et "Masquer les règles" (état activé). L'utilisateur a deux documents ouverts en même temps. Il/elle a caché les règles dans un document, mais pas sur l'autre. Lorsque l'utilisateur se déplace entre les documents, l'élément de menu doit refléter l'état de ce document, pas celui de l'application dans son ensemble.Plusieurs documents ouverts en même temps, chacun avec des états d'élément de menu différents

Comment fait-on cela proprement? J'ai fait un googled autour, mais il ne semble pas y avoir une façon prédéfinie "out of the box" de le faire. Ce serait bien si NSDocument avait une sorte de méthode de type "didRegainFocus" où une telle logique peut être ajoutée.

Ma mise en œuvre réelle est un peu plus compliquée car c'est en fait un NSViewController dans mon NSDocument qui traite de ces éléments de menu particuliers.

@interface MyDocument : NSDocument { 
    SomeViewController *myCustomizedTextViewController; 
} 

Lorsque MyDocument est le document actuellement actif, j'ai besoin méthodes myCustomizedTextViewController pour assurer l'état d'un couple de NSMenuItem s dans le menu principal de l'application. L'un est véritablement un dirigeant. L'autre est un paramètre temporaire similaire.

+0

Merci pour cette question, je me demandais exactement la même chose au démarrage de mon application. – ptrico

Répondre

1

La cible des éléments de menu implémente la méthode validateUserInterfaceItem: pour les activer/désactiver. Voir la référence User Interface Validation pour plus d'informations.

+0

Si simple, merci! Je pensais totalement à cela et je pensais aux méthodes NSWindowDelegate et à d'autres solutions over-the-top. Je lisais la documentation NSUserInterfaceItemValidations et manquais totalement l'intention. Ça fonctionne comme un rêve maintenant, acclamations :) – d11wtq