在 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
}
}
我正在尝试实现 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
}
}