问题描述
我正在尝试在 macOS 应用程序中按下给定键时执行某些操作。首先,我遇到了一个问题,在每次按下时多次检测到 keyDown
事件,因此多次执行处理程序。根据建议,我添加了代码来检查事件是否重复,并且当时似乎可以正常工作。但是,此解决方案似乎仅在某些时候有效,其他时候则多次检测到事件。此外,我似乎无法在有效和无效的情况下找到模式。可能是什么问题,我该如何解决。
代码:
override func viewDidLoad() {
super.viewDidLoad()
NSEvent.addLocalMonitorForEvents(matching: .keyDown,handler: checkKeyDown(event:))
}
func checkKeyDown(event: NSEvent) -> NSEvent{
if event.isARepeat == false{
if event.keyCode == 36{
print("Hello World!")
}
}
return event
}
解决方法
在窗口关闭时移除事件监视器似乎解决了这个问题。
var numKeyDown : Any?
override func viewDidLoad() {
super.viewDidLoad()
numKeyDown = NSEvent.addLocalMonitorForEvents(matching: .keyDown,handler: checkKeyDown(event:))
}
override func viewWillDisappear(){
if let numMonitor = self.numKeyDown {
NSEvent.removeMonitor(numMonitor)
}
}
func checkKeyDown(event: NSEvent) -> NSEvent{
if event.isARepeat == false{
if event.keyCode == 36{
print("Hello World!")
}
}
return event
}