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.
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