0
点赞
收藏
分享

微信扫一扫

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

老王420 2022-06-30 阅读 56

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

需求

Swift macOS NSTextField 响应键盘按键 Enter 回车键,或者其它按键_apple
举例子演示,需要实现这样的功能:
在第一个输入框按回车时,光标跳入第二个输入框,在第二个输入框中按回车时,执行添加词组的命令。

一、继承 ​​NSTextFieldDelegate​​​ protocal 并设置 ​​delegate​

​NSViewController​​​ BuddyVC 里面有两个 ​​NSTextField​​​ codeTextField 和 wordTextField,
在 ​​​viewDidLoad()​​​ 中将对应 ​​NSTextField​​​ 的 ​​delegate​​​ 设为 ​​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
}
}

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


举报

相关推荐

0 条评论