我有一个关于我的OpenGL Cocoa应用程序的问题 - 每当触发keyUp / KeyDown事件时,都会播放系统声音...我该如何为我的应用程序禁用此逻辑?
我有一种不好的感觉,认为由于某些奇怪的原因,我的应用程序可能会将按键操作视为错误并播放系统警告声音...请帮忙解决!
我有一个关于我的OpenGL Cocoa应用程序的问题 - 每当触发keyUp / KeyDown事件时,都会播放系统声音...我该如何为我的应用程序禁用此逻辑?
我有一种不好的感觉,认为由于某些奇怪的原因,我的应用程序可能会将按键操作视为错误并播放系统警告声音...请帮忙解决!
将以下代码添加到您的NSView/NSWindow子类中
- (void)keyDown:(NSEvent *)theEvent {
对于上下箭头键进行特殊处理,但对于其他键则执行 [super keyDown: theEvent]。
我认为这可能有意义。
对于我来说,以下内容已经被证明是最佳解决方案:
override func awakeFromNib() {
// Do your setup here.
NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
if keyDownPressed(with: $0) {
return nil
}
return $0
}
}
func keyDownPressed(with event: NSEvent) -> Bool {
print("caught a key down: \(event.keyCode)")
if event.keyCode == 125 {
//your code for arrow down here
return true
}
if event.keyCode == 126 {
//your code for arrow up here
return true
}
return false
}
@implementation YourCustomNSView
- (BOOL)acceptsFirstResponder { return YES; }
- (void)keyDown:(NSEvent *)theEvent {
NSLog (@"keypress %@", theEvent); // [super keyDown:theEvent]; // 这一行会触发系统蜂鸣错误,没有它就没有蜂鸣声 }
@end
Swift 5.6 解决方案
这是由于响应链中未处理的 keydown 事件引起的。
确保你的响应链中有一些 NSView 子类覆盖了此方法并返回 true。
override performKeyEquivalent(with event: NSEvent) -> Bool {}