在 Swift 的子类中为 OSX 管理事件处理

Manage event handling in a subclass in Swift for OSX

我正在尝试实现 NSSlider 的子class,它应该处理修饰键事件。 我把这个覆盖函数放在 class:

    override func flagsChanged(theEvent: NSEvent) {
    if (theEvent.modifierFlags.rawValue & NSEventModifierFlags.DeviceIndependentModifierFlagsMask.rawValue) == NSEventModifierFlags.AlternateKeyMask.rawValue {
        optionKeyPressed = true
        Swift.print("OptionKey is pressed")
    } else {
        optionKeyPressed = false
    }
}

还有一个初始化程序:

    override init(frame: NSRect) {
        super.init(frame: frame)
    NSEvent.addLocalMonitorForEventsMatchingMask(.FlagsChangedMask) { (theEvent) -> NSEvent? in
        self.flagsChanged(theEvent)
        return theEvent
    }

不幸的是,当我尝试在情节提要中使用我的子class时,没有任何反应:从未调用 init 函数。

在所有这些方面几乎是新手,一些指导会很好! 非常感谢,

乔希

您还需要实现 initWithCoder: 初始化程序,因为当您在 Storyboard 中使用 class 时,该初始化程序被调用:

required init?(coder: NSCoder) {
    super.init(coder: coder)
    NSEvent.addLocalMonitorForEventsMatchingMask(.FlagsChangedMask) { (theEvent) -> NSEvent? in
        self.flagsChanged(theEvent)
        return theEvent
    }
}