【发布时间】:2017-12-06 21:05:56
【问题描述】:
我找不到解决此问题的最新内容。
如何在编辑 NSTextField 时监控诸如箭头键之类的操作?
根据我的查找:
- NSControlTextEditingDelegate 函数未被调用(而且我不知道如何使用它们)
- NSTextFieldDelegate 函数没有列出可以在这里工作的东西
【问题讨论】:
标签: cocoa nstextfield
我找不到解决此问题的最新内容。
如何在编辑 NSTextField 时监控诸如箭头键之类的操作?
根据我的查找:
- NSControlTextEditingDelegate 函数未被调用(而且我不知道如何使用它们)
- NSTextFieldDelegate 函数没有列出可以在这里工作的东西
【问题讨论】:
标签: cocoa nstextfield
设置您的文本字段的委托:
textField.delegate = self
为协议添加以下继承:
class MyTextField : NSTextFieldDelegate, NSControlTextEditingDelegate { ...
并实现以下内容:
func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool {
if commandSelector == #selector(moveUp(_:)) {
...
} else if commandSelector == #selector(moveDown(_:)) {
...
} else if commandSelector == #selector(insertNewline(_:)) {
...
}
return true
}
这个链接Recognize if user has pressed arrow key while editing NSTextField swift有更深入的解释
【讨论】:
keyDown doesn't seem to work with NSTextFields (it does for NSTextView),所以我所做的是子类NSTextField 或ViewController 并添加这些方法:
import Cocoa
class MyTextField: NSTextField
{
override func keyUp(with event: NSEvent) {
print("MyTextField keyUp key is %ld", event.keyCode)
super.keyUp(with: event)
}
}
class MyTextView: NSTextView
{
override func keyDown(with event: NSEvent) {
print("MyTextView keyDown key is %ld", event.keyCode)
super.keyDown(with: event)
}
}
class ViewController: NSViewController {
override func keyUp(with event: NSEvent) {
print("ViewController keyUp key is %ld", event.keyCode)
super.keyUp(with: event)
}
}
【讨论】: