当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在NSTextField中按下Enter键时执行操作?》经验,为你挑选了5个好方法。

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



1> Jason Coco..:

您可以通过设置文本字段的操作来完成此操作.在IB中,将文本字段的选择器连接到控制器或任何呈现您要使用的IBAction的对象.

要在代码中设置它,请向NSTextField发送setTarget:消息和setAction:消息.例如,如果您在代码中的控制器对象上设置此项,并且textField出口名为myTextField:

- (void)someAction:(id)sender
{
  // do something interesting when the user hits  in the text field
}

// ...

[myTextField setTarget:self];
[myTextField setAction:@selector(someAction:)];


citelao:在现代XCode中,NSTextField可以有不同的动作模式.默认情况下,NSTextField设置为"Send on End Editing",当您因任何原因(例如,标签离开)停止编辑时,它会发送操作.但是您可以在Interface Builder中将其切换为"仅在输入时发送"(在属性选项卡上,朝向"文本字段"属性组的底部),以使其仅在用户实际按下回车时发送操作.
除非我"跳出"字段,否则它也会执行操作.

2> M.Shuaib Imr..:

你必须这样做

对于某些键(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
} 


另一个相关命令是`cancelOperation:`,它将由转义键触发.

3> Raff..:

在您的委托(NSTextFieldDelegate)中,添加以下内容:

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


@Gargo至少在El Capitan上这不是真的.按Enter键会收到此消息.要么它是导致它或其他东西的一些验证.

4> drdrdrdr..:

斯威夫特3版@ M.ShuaibImran的解决方案:

首先将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> Vikas Bansal..:

它非常简单,您可以直接从UI编辑器进行操作

    右键单击Text Feild,将Action引用拖动到按钮,如下面的屏幕截图所示

在此输入图像描述

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

在此输入图像描述

    现在看起来应该是这样的

在此输入图像描述

注意:TabEnter按键后将立即引发事件.如果您希望仅在用户按下Enter键时引发操作,则必须进行设置.转到Attribute inspector并更改Action属性,Send on Enter only如下面的屏幕截图所示

在此输入图像描述

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有