Swift macOS NSTextField 响应键盘按键 Enter 回车键,或者其它按键

Swift macOS NSTextField 响应键盘按键 Enter 回车键,或者其它按键

需求

在这里插入图片描述
举例子演示,需要实现这样的功能:
在第一个输入框按回车时,光标跳入第二个输入框,在第二个输入框中按回车时,执行添加词组的命令。

一、继承 NSTextFieldDelegate protocal 并设置 delegate

NSViewController BuddyVC 里面有两个 NSTextField codeTextField 和 wordTextField,
viewDidLoad() 中将对应 NSTextFielddelegate 设为 self

class BuddyVC: NSViewController, NSTextFieldDelegate {
    @IBOutlet weak var codeTextField: NSTextField!
    @IBOutlet weak var wordTextField: NSTextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        codeTextField.delegate = self
        wordTextField.delegate = self
    }
}

二、重要实现内容

实现 control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool 方法,这个方法是接收并处理用户输入的按键操作的

参数说明
control是指发送按键请求的 control,这里是指对应的 NSTextField,需要手动转一下类
commandSelector对应输入的键

返回值

  • 返回 true,表示这个请求你自己处理了
  • 返回 false,表示这个请求你不作处理,交给系统处理。一定不要忘了返回 false,如果忘了,其它一些你没有进行处理的删除操作等都无法使用了
func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
    
    switch commandSelector {
    // 当检测到按键是 Enter 回车键时,
    // 对应的其它按键可以去 NSResponder 中查看,这里中列举了 Enter 这个键
    case #selector(NSResponder.insertNewline(_:)):
        // 这里面就是当按下 Enter 键时,你需要做的一些东西了
        // 1. 判断发送这个按键的 control 是不是 NSTextField
        if let inputView =  control as? NSTextField {
            // 2. 当在 codeTextField 按下回车时
            if inputView == codeTextField {
                wordTextField.becomeFirstResponder() // 2.1 光标移动到用户词输入框
            } else {
            // 3. 当在 wordTextField 按下回车时
                addWord() // 3.1 去执行添加用户词的方法
            }
        }
        // 3. 当你处理了对应的按键操作时,返回 true
        return true
        
    default:
        // 4. 默认返回 false,表示其它按键操作不会自己处理,交给系统处理
        return false
    }
}

这样就实现了需求中的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月ooOO

许个愿,我帮你实现

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值