OSX swift 3 - 无法禁用keyDown。错误的声音

时间:2017-12-19 13:12:25

标签: swift macos

当我按下空格键和箭头键时,我正试图禁用错误声音。我尝试使用 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)

}

1 个答案:

答案 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以停止事件的分派。

唯一的缺点是,根本不会发出声音。即使您未处理关键事件。