热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Ihaveasmallproblemrightnow.IwanttoexecuteamethodwhentheEnterkeyispressedinaNSTe

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.

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

8 个解决方案

#1


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.

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

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:

要在代码中设置它,请向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:)];

#2


You have to do only this

你必须这样做

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

对于某些键(Enter,Delete,Backspace等)

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
    }

    // return YES if the action was handled; otherwise NO
} 

#3


In your delegate (NSTextFieldDelegate), add the following:

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

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

#4


It's very easy and you can do it directly from UI editor

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

  1. Right click the Text Feild, drag Action reference to the button as shown below in the screenshot
  2. 右键单击Text Feild,将Action引用拖动到按钮,如下面的屏幕截图所示

enter image description here

  1. Now it will give you some option as shown in screen shot below, you need to select perform click
  2. 现在它将为您提供一些选项,如下面的屏幕截图所示,您需要选择执行单击

enter image description here

  1. Now it should look like this
  2. 现在看起来应该是这样的

enter image description here

Note: The event will be raised as soon as you press Tab or Enter key. In case you want the action should only be raised when user presses the Enter key then you have to do a setting. Go to the Attribute inspector and change the Action property to Send on Enter only as shown in screen shot below

注意:只要按Tab键或Enter键,就会引发事件。如果您想要仅在用户按下Enter键时引发操作,则必须进行设置。转到“属性”检查器,将“操作”属性更改为“仅在输入时发送”,如下面的屏幕截图所示

enter image description here

#5


The Swift 3 version of @M.ShuaibImran's solution:

Swift 3版@ M.ShuaibImran的解决方案:

First subclass your ViewController to: NSTextFieldDelegate

首先将ViewController子类化为:NSTextFieldDelegate

class MainViewController: NSViewController, NSTextFieldDelegate {
  ...
} 

Assign the textField delegate to the ViewController in your viewDidLoad():

将textField委托分配给viewDidLoad()中的ViewController:

self.textField.delegate = self

Include the NSTextFieldDelegate method that handles keyboard responders:

包括处理键盘响应器的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
}

#6


NSTextFieldDelegate's – control:textView:doCommandBySelector: is your friend.

NSTextFieldDelegate的 - 控件:textView:doCommandBySelector:是你的朋友。

Look for the insertNewline: command.

查找insertNewline:命令。

#7


In Interface Builder - click on your NSTextField, go to the connections editor, drag from selector to your controller object - you're actions should come up!

在Interface Builder中 - 单击您的NSTextField,转到连接编辑器,从选择器拖动到您的控制器对象 - 您应该采取行动!

#8


Best way to do that is to bind the NSTextField value with NSString property.

最好的方法是将NSTextField值与NSString属性绑定。

For Example,define a method:

例如,定义一个方法:

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

add bindings:

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

Enter any text and hit the return key, setTextFieldString will be called.

输入任何文本并点击返回键,将调用setTextFieldString。


推荐阅读
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • iOS开发 - 解决导航栏子视图损坏问题
    本文介绍了一个在Xcode 5.0.2和iOS 7模拟器环境下,使用Storyboard创建CoreData CRUD应用时遇到的导航栏子视图损坏问题及其解决方案。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 2022年2月 微信小程序 app.json 配置详解:启用调试模式
    本文将详细介绍如何在微信小程序的 app.json 文件中启用调试模式(debug),并通过实际案例展示其配置方法和应用场景。 ... [详细]
  • 更新vuex的数据为什么用mutation?
    更新vuex的数据为什么用mutation?,Go语言社区,Golang程序员人脉社 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
author-avatar
hjalshj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有