当我按下空格键和箭头键时,我正试图禁用错误声音。我尝试使用 super.keyDown处理事件(使用:event)没有运气。除了使用全局关键框架之外,找不到任何其他工作解决方案。我有其他选择吗?
NSEvent.addLocalMonitorForEvents(matching: .keyDown) { (aEvent) -> NSEvent? in
self.keyDown(with: aEvent)
return aEvent
}
}
override func keyDown(with event: NSEvent) {
super.keyDown(with: event)
}
答案 0 :(得分:5)
更新:我发现问题的根本原因是,视图是实际上不应该是的第一响应者。将响应者设置为nil self.view.window?.makeFirstResponder(nil)
之后,我可以解决此问题。我也将performKeyEquivalent
用作this answer suggested。
我知道我的答案很晚,但是也许它将对您或将来的其他人有所帮助。我不确定这是否是最好的方法,但确实有效。只需返回nil而不是事件即可。
NSEvent.addLocalMonitorForEvents(matching: .keyDown) { (aEvent) -> NSEvent? in
self.keyDown(with: aEvent)
return nil
}
override func keyDown(with event: NSEvent) {
super.keyDown(with: event)
}
Apple的方法文档对block
参数表示以下内容:
事件处理程序块对象。将事件传递给监视。您可以返回未修改的事件,创建并返回一个新的NSEvent对象,或者返回nil以停止事件的分派。
唯一的缺点是,根本不会发出声音。即使您未处理关键事件。