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



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

当我在NSTextField中按"输入"时,它会发送一个操作。也许有没有办法在我单击或写入 NSTextField 时发送操作?

您可以子类化NSTextField并覆盖文本更改的textDidChange,用于失去焦点的textDidEndEdit和用于键控的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)
    }
}

样本

相关内容

  • 没有找到相关文章

最新更新