Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Execute an Action when the Enter-Key is pressed in a NSTextField?

Tags:

xcode

cocoa

I have a small problem right now. I want to execute a method when the Enter key is pressed in a NSTextField. The user should be able to enter his data and a calculation method should be executed as soon as he hits the enter key.

like image 556
TalkingCode Avatar asked Jun 15 '09 12:06

TalkingCode


2 Answers

You can do this by setting the text field's action. In IB, wire the text field's selector to your controller or whatever object presents the IBAction you want to use.

To set it in code, send the NSTextField a setTarget: message and a setAction: message. For example, if you're setting this on your controller object in code, and your textField outlet is called myTextField:

- (void)someAction:(id)sender {   // do something interesting when the user hits <enter> in the text field }  // ...  [myTextField setTarget:self]; [myTextField setAction:@selector(someAction:)]; 
like image 161
Jason Coco Avatar answered Oct 04 '22 19:10

Jason Coco


You have to do only this

For some keys (Enter, Delete, Backspace, etc)

self.textfield.delegate = self; 

and then implement this method

- (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      } else if (commandSelector == @selector(cancelOperation:)) {         //Do something against Escape key     }     // return YES if the action was handled; otherwise NO }  
like image 32
M.Shuaib Imran Avatar answered Oct 04 '22 17:10

M.Shuaib Imran