如何解决在 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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。