我正在用 Swift 为 OSX 编写一个应用程序,我正在寻找一种在 NSControl 上捕获事件的好方法。显然,我搜索过,但我发现的信息往往不清楚或陈旧。就我而言,我想在 NSTextField 上捕获几个事件(键向上、文本更改、焦点丢失……)。
当我在 NSTextField 中按下“Enter”时,它会发送一个动作。当我在 NSTextField 中单击或写入时,也许有办法发送动作?
您可以继承 NSTextField 并覆盖textDidChange
文本更改,textDidEndEditing 失去焦点和 keyUp 方法键。试试这样:
import Cocoa
class CustomTextField: NSTextField {
override func viewWillMove(toSuperview newSuperview: NSView?) {
// customize your field here
frame = newSuperview?.frame.insetBy(dx: 50, dy: 50) ?? frame
}
override func textDidChange(_ notification: Notification) {
Swift.print("textDidChange")
}
override func textDidEndEditing(_ notification: Notification) {
Swift.print("textDidEndEditing")
}
override func keyUp(with event: NSEvent) {
Swift.print("keyUp")
}
}
查看控制器示例用法:
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
let textField = CustomTextField()
view.addSubview(textField)
}
}