微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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 举报,一经查实,本站将立刻删除。