【问题标题】:How to catch some events on a NSControl in swift如何快速捕捉 NSControl 上的一些事件
【发布时间】:2017-04-12 13:36:03
【问题描述】:

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

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

【问题讨论】:

标签: swift macos nscontrol


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多