2010-07-16 8 views
1

J'ai un élément de la barre d'outils qui contient une vue (NSButton) et la cible de la vue est définie sur nil, donc elle recherche la chaîne du répondeur lorsqu'elle déclenche l'action. Cependant, j'ai de la difficulté à essayer de valider le premier répondant. J'ai sous-classé NSToolbarItem et implémenté -(void)validate. Les références que j'ai trouvées indiquent que vous devriez être en mesure d'obtenir le premier répondeur en appelant [[[self view] window] firstResponder], puis en vérifiant si la chaîne de répondeurs implémente NSToolbarItemValidation ou NSUserInterfaceValidations et en appelant la méthode de validation appropriée.Validation de NSToolbarItem avec View par rapport à FirstResponder

Cependant, quand j'appelle [[self view] window], je reviens nil comme fenêtre, donc je ne suis pas capable de récupérer le premier répondeur.

Je ne suis pas sûr si cela fait une différence, mais je crée la barre d'outils dans le XIB au lieu de l'écrire dans le code. En regardant dans NSToolbar.h, il y a un ivar qui référence la fenêtre contenant, donc j'ai pu trouver le premier répondeur en appelant [[[self toolbar] valueForKey:@"window"] firstResponder], mais c'est un peu un hack et je préférerais utiliser quelque chose de documenté/stabler.

Répondre

0

Vous ne validez pas manuellement. L'application appelle -validate (ou sa variante appropriée) sur chaque objet de la chaîne du répondeur, pour chaque élément de menu ou élément de la barre d'outils nécessitant une validation, jusqu'à ce qu'il en trouve un qui renvoie YES (ce qui signifie qu'il prend en charge l'action de chaque menu ou barre d'outils), ou n'en trouve pas. S'il en trouve un, votre élément de barre d'outils ou votre élément de menu est activé. Sinon, il est désactivé. Au moins, c'est la théorie générale.

+0

Pour les instances NSToolbarItem qui contiennent des vues, vous devez sous-classer et fournir une implémentation de -validate. J'essaie de comprendre comment écrire cette méthode lorsque la cible est le premier répondant (c.-à-d. «Néant»). http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Toolbars/Tasks/ValidatingTBItems.html#//apple_ref/doc/uid/20000753-BAJGFHDD – Jablair