如何在swift中捕获NSControl上的一些事件

时间:2017-04-12 13:36:03

标签: swift macos nscontrol

我正在为Swift编写一个OSX应用程序,我正在寻找一种在NSControl上捕获事件的好方法。 显然,我搜索过,但我发现的信息往往不清楚或陈旧。 在我的情况下,我想在NSTextField上捕获几个事件(键入,文本更改,焦点丢失,...)。

当我在NSTextField中按“Enter”时,它会发送一个动作。当我点击或写入NSTextField时,有没有办法发送动作?

1 个答案:

答案 0 :(得分:3)

您可以继承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)
    }
}

Sample