76 votes

Exécuter une Action lorsque la Touche Entrée est enfoncée dans un NSTextField?

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.

84voto

Jason Coco Points 52303

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:)];

54voto

Shabi Tech Points 366

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

26voto

Raff Points 134

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!");
    }
}

4voto

iljawascoding Points 297

NSTextFieldDelegate's – control:textView:doCommandBySelector: est votre ami.

Recherchez l' insertNewline: commande.

1voto

Daniel Morris Points 2053

Dans Interface Builder - cliquez sur votre NSTextField, accédez à l'éditeur de connexions, faites glisser le sélecteur à votre contrôleur de l'objet que vous êtes actions devraient venir!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X