在NSTextField中按下Enter键时执行操作?

时间:2009-06-15 12:08:03

标签: cocoa xcode

我现在有一个小问题。我想在NSTextField中按下Enter键时执行一个方法。用户应该能够输入他的数据,并且一旦他按下回车键就应该执行计算方法。

8 个答案:

答案 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编辑器

进行操作
  1. 右键单击Text Feild,将Action引用拖动到按钮,如下面的屏幕截图所示
  2. enter image description here

    1. 现在它将为您提供一些选项,如下面的屏幕截图所示,您需要选择执行单击
    2. enter image description here

      1. 现在看起来应该是这样的
      2. enter image description here

        注意:只要您按PDFont.getBoundingBox()Tab键,系统就会引发该事件。如果您希望仅在用户按下Enter键时才会引发操作,则必须进行设置。转到Enter并将操作属性更改为Attribute inspector,如下面的屏幕截图所示

        enter image description here

答案 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