Executar uma ação quando a tecla Enter é pressionada em um NSTextField?

Eu tenho um pequeno problema agora. Eu quero executar um método quando a tecla Enter é pressionada em um NSTextField. O usuário deve ser capaz de inserir seus dados e um método de cálculo deve ser executado assim que ele pressionar a tecla enter.

Você pode fazer isso definindo a ação do campo de texto. No IB, conecte o seletor do campo de texto ao seu controlador ou qualquer object que apresente a IBAction que você deseja usar.

Para configurá-lo no código, envie a mensagem NSTextField a setTarget: e a mensagem setAction: Por exemplo, se você estiver configurando isso no seu object controlador no código, e sua saída textField for chamada myTextField:

 - (void)someAction:(id)sender { // do something interesting when the user hits  in the text field } // ... [myTextField setTarget:self]; [myTextField setAction:@selector(someAction:)]; 

Você tem que fazer apenas isso

Para algumas chaves (Enter, Delete, Backspace, etc)

 self.textfield.delegate = self; 

e, em seguida, implementar este método

 - (BOOL)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 } // return YES if the action was handled; otherwise NO } 

Em seu representante (NSTextFieldDelegate), adicione o seguinte:

 -(void)controlTextDidEndEditing:(NSNotification *)notification { // See if it was due to a return if ( [[[notification userInfo] objectForKey:@"NSTextMovement"] intValue] == NSReturnTextMovement ) { NSLog(@"Return was pressed!"); } } 

É muito fácil e você pode fazê-lo diretamente do editor da interface do usuário

  1. Clique com o botão direito do mouse no Text Feild, arraste Action reference para o botão como mostrado abaixo na captura de canvas

insira a descrição da imagem aqui

  1. Agora ele vai te dar alguma opção como mostrado na captura de canvas abaixo, você precisa selecionar executar clique

insira a descrição da imagem aqui

  1. Agora deve ficar assim

insira a descrição da imagem aqui

Nota: O evento será gerado assim que você pressionar Tab ou tecla Enter . Caso você queira que a ação só seja levantada quando o usuário pressionar a tecla Enter , será necessário fazer uma configuração. Vá para o Attribute inspector e altere a propriedade Action para Send on Enter only como mostrado na captura de canvas abaixo

insira a descrição da imagem aqui

A versão Swift 3 da solução @ M.ShuaibImran:

Primeiro subclass seu ViewController para: NSTextFieldDelegate

 class MainViewController: NSViewController, NSTextFieldDelegate { ... } 

Atribua o delegado textField ao ViewController em seu viewDidLoad ():

 self.textField.delegate = self 

Inclua o método NSTextFieldDelegate que manipula respondedores de teclado:

 func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool { if (commandSelector == #selector(NSResponder.insertNewline(_:))) { // Do something against ENTER key print("enter") return true } else if (commandSelector == #selector(NSResponder.deleteForward(_:))) { // Do something against DELETE key return true } else if (commandSelector == #selector(NSResponder.deleteBackward(_:))) { // Do something against BACKSPACE key return true } else if (commandSelector == #selector(NSResponder.insertTab(_:))) { // Do something against TAB key return true } else if (commandSelector == #selector(NSResponder.cancelOperation(_:))) { // Do something against ESCAPE key return true } // return true if the action was handled; otherwise false return false } 

NSTextFieldDelegate ‘s – control:textView:doCommandBySelector: é seu amigo.

Procure o comando insertNewline:

No Interface Builder – clique no seu NSTextField, vá para o editor de conexões, arraste do seletor para o seu object controlador – você deve fazer ações!

A melhor maneira de fazer isso é ligar o valor NSTextField com a propriedade NSString .

Por exemplo, defina um método:

 (void)setTextFieldString:(NSString *)addressString {} 

adicionar ligações:

 [textField bind:@"value" toObject:self withKeyPath:@"self.textFieldString" options:nil]; 

Digite qualquer texto e pressione a tecla de retorno, setTextFieldString será chamado.