在Swift中多次运行的按键事件处理程序



当给定的键在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
}

相关内容

  • 没有找到相关文章

最新更新