J'ai un petit problème à l'heure actuelle. Je veux exécuter une méthode lorsque la touche Entrée est enfoncée dans un NSTextField. L'utilisateur doit être en mesure d'entrer ses données et une méthode de calcul doit être exécutée dès qu'il appuie sur la touche entrée.
Réponses
Trop de publicités?Vous pouvez le faire en définissant le champ de texte à l'action. Au bureau de l'IB, le fil du champ de texte est le sélecteur de votre contrôleur ou quel que soit l'objet présente les IBAction vous souhaitez utiliser.
Pour définir dans le code, envoyer le NSTextField un setTarget:
message et un setAction:
message. Par exemple, si vous créez sur votre contrôleur de l'objet dans le code, et votre textField prise est appelée myTextField:
- (void)someAction:(id)sender
{
// do something interesting when the user hits <enter> in the text field
}
// ...
[myTextField setTarget:self];
[myTextField setAction:@selector(someAction:)];
Vous avez à faire seulement ce
Pour certaines touches (Entrée, de Supprimer, de revenir en arrière, etc)
self.textfield.delegate = self;
puis de mettre en œuvre cette méthode
- (void)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
{
NSLog(@"Selector method is (%@)", NSStringFromSelector( commandSelector ) );
if (commandSelector == @selector(insertNewline:)) {
//Do something against ENTER key
} else if (commandSelector == @selector(deleteForward:)) {
//Do something against DELETE key
} else if (commandSelector == @selector(deleteBackward:)) {
//Do something against BACKSPACE key
} else if (commandSelector == @selector(insertTab:)) {
//Do something against TAB key
}
}
Dans votre délégué (NSTextFieldDelegate), ajoutez la ligne suivante:
-(void)controlTextDidEndEditing:(NSNotification *)notification
{
// See if it was due to a return
if ( [[[notification userInfo] objectForKey:@"NSTextMovement"] intValue] == NSReturnTextMovement )
{
NSLog(@"Return was pressed!");
}
}