Je cherche partout pour un exemple simple de comment avoir une action (ou un bouton) être déclenché lorsque la touche Entrée est touchée dans le champ de texte. P>
Devrais-je sous-classer le champ de texte? Aurais-je besoin de créer un délégué pour appeler l'action dont j'ai besoin? Existe-t-il un moyen d'attraper l'événement dans ma classe de contrôleur de la fenêtre principale? P>
Si vous pouviez même me signaler à la bonne direction qui serait géniale. Merci. P>
5 Réponses :
Connectez simplement une ibaction de votre classe de contrôleur avec un champ de texte. L'action doit être appelée avec vous appuyez sur Entrée ou laissez le champ de texte avec un onglet ou une souris. P>
Pour obtenir une action après avoir appuyé sur Entrée, écrivez simplement une ibaction dans votre contrôleur de fenêtre et connectez-vous à votre champ de texte. Si vous souhaitez plus que votre méthode soit appelée lorsque vous vous concentrez sur le champ de texte et laissez le champ de texte, vous devez définir le délégué ( Voir ici ). P>
Bonjour, merci, je l'ai fait, mais comment puis-je filtrer pour la clé Entrée car lorsqu'il s'agit de la concentration ou de la flou du champ de texte, l'action est également déclenchée. Merci
Pour obtenir une notification lorsque l'édition est terminée (entrez la clé de la clé ou de l'onglet est touchée), la méthode du délégué Class ControlTextDidIdIting est appelée, vous pouvez déclencher l'action. Si vous souhaitez que votre action soit déclenchée pour seulement entrer la touche Entrée, vous devez écrire des formateurs personnalisés ou une classe NStextField personnalisée.
Merci Gudda. En fait, je viens de découvrir que vous pouvez envoyer l'action uniquement sur ENTER comme décrit ici: mojomonkeycoding.com/2009/11/14/... . Do Heureusement pas besoin de sous-classe.
Le site Web de MojomonkeyCoding.com est maintenant mort, une vraie honte. Finalement, j'ai trouvé un moyen de le faire proprement en code - sans sous-classement - C.F. ma réponse ci-dessous.
Que Dieu te bénisse! Tu as sauvé ma santé mentale
Le site qui est référencé dans les commentaires à la réponse acceptée ... est maintenant "suspendu" par le Webhost et Google Cache n'a pas la capture d'écran contenant l'étape clé.
Donc, voici une alternative Solution J'ai trouvé que: P>
Pour certaines touches (Entrez, Supprimer, BackSpace, etc.), Apple n'invoque pas la commande normale ControlTextDIDEDIVENTION: ETC. Au lieu de cela, Apple fait des sélecteurs individuels pour chaque clé de magie - mais il existe une méthode que vous pouvez utiliser pour l'intercepter. P>
Documents officiels d'Apple ici: p>
... Mais dans le cas où Vanishes / se déplace, ajoutez cette méthode dans votre délégué: p> dans mon cas, je voulais aussi remplacer la clé de retour arrière - exécutant l'application avec cette méthode , J'ai reçu la production disant que le sélecteur était "deletebackward:", j'ai donc ajouté une autre déclaration IF à réagir à cela. P> p>
FYI, si vous voulez attraper la touche Entrée lorsque la fenêtre contextuelle de l'achèvement de NstextView est ouverte, cette méthode ne fonctionnera pas car DocommandBySelector: Ne vous invoque pas. Au lieu de cela, vous pouvez simplement regarder pour [[NsApp Curecrovent] .charactersignorSmodificateurs ISequaltostring: @ "\ r"] code> dans
ControlTextDidchange: code>
Pour le curieux, voici comment implémenter appdelegate.h: p > -ControltextDidenseting: (NOTIFICATION) obj code> (Si vous ne vous souciez pas de répondre à la touche Entrée)
@synthesize myTextField = _myTextField;
@synthesize myButton = _myButton;
// Make yourself the delegate
- (void)applicationDidFinishLoading:(NSNotification *)aMessage {
_myTextField.delegate = self;
}
// NSTextField objects send an NSNotification to a delegate if
// it implements this method:
- (void)controlTextDidEndEditing:(NSNotification *)obj {
if ([[obj object] isEqual:_textField]) {
[self myButtonPressed:nil]; // nil = sender
}
}
La meilleure chose à faire serait d'utiliser Control + glisser code> à l'action que vous avez déjà créée, alors appuyez sur
retour code> déclenchera également l'action. P >
Oui. De plus, vous pouvez (si votre constructeur d'interface n'est pas très B> Old), sélectionnez votre NSTextField, ouvrez l'inspecteur des attributs et modifiez l'action en "Envoyer sur Entrée uniquement" au lieu de "Envoyer l'édition finale". ; Cela facilite le comportement de NstextField correctement, par exemple un champ d'URL pour un navigateur Web.