我现在有一个小问题。我想在NSTextField中按下Enter键时执行一个方法。用户应该能够输入他的数据,并且一旦他按下回车键就应该执行计算方法。
答案 0 :(得分:77)
您可以通过设置文本字段的操作来执行此操作。在IB中,将文本字段的选择器连接到控制器或任何呈现您要使用的IBAction的对象。
要在代码中设置它,请向NSTextField发送setTarget:
消息和setAction:
消息。例如,如果您在代码中的控制器对象上设置此项,并且textField出口名为myTextField:
- (void)someAction:(id)sender
{
// do something interesting when the user hits <enter> in the text field
}
// ...
[myTextField setTarget:self];
[myTextField setAction:@selector(someAction:)];
答案 1 :(得分:44)
你必须只做这个
对于某些键(Enter,Delete,Backspace等)
self.textfield.delegate = self;
然后实现此方法
- (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
}
答案 2 :(得分:24)
在您的委托(NSTextFieldDelegate)中,添加以下内容:
-(void)controlTextDidEndEditing:(NSNotification *)notification
{
// See if it was due to a return
if ( [[[notification userInfo] objectForKey:@"NSTextMovement"] intValue] == NSReturnTextMovement )
{
NSLog(@"Return was pressed!");
}
}
答案 3 :(得分:8)
这非常简单,您可以直接从UI编辑器
进行操作答案 4 :(得分:8)
@ M.ShuaibImran解决方案的 Swift 3 版本:
首先将ViewController子类化为:NSTextFieldDelegate
class MainViewController: NSViewController, NSTextFieldDelegate {
...
}
将textField委托分配给viewDidLoad()中的ViewController:
self.textField.delegate = self
包括处理键盘响应者的NSTextFieldDelegate方法:
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
}
答案 5 :(得分:4)
NSTextFieldDelegate
&#39; s - control:textView:doCommandBySelector:
是你的朋友。
查找insertNewline:
命令。
答案 6 :(得分:1)
在Interface Builder中 - 单击您的NSTextField,转到连接编辑器,从选择器拖动到您的控制器对象 - 您应该采取行动!
答案 7 :(得分:1)
最好的方法是将NSTextField
值与NSString
属性绑定。
例如,定义一个方法:
(void)setTextFieldString:(NSString *)addressString {}
添加绑定:
[textField bind:@"value" toObject:self withKeyPath:@"self.textFieldString" options:nil];
输入任何文本并点击返回键,将调用setTextFieldString
。