【问题标题】:How to turn off keyboard sounds in Cocoa application?如何在 Cocoa 应用程序中关闭键盘声音?
【发布时间】:2011-12-21 00:29:52
【问题描述】:

我的 OpenGL Cocoa 应用程序有问题 - 每次触发 keyUp / KeyDown 事件时,都会播放系统声音...如何为我的应用程序禁用此逻辑?

我有一种不好的预感,由于某种奇怪的原因,我的应用程序可能会将按键视为错误并播放系统警报声...请帮助!

【问题讨论】:

  • 你见过 NSSound 类引用吗? '- (void)setVolume:(float)volume'
  • 这很有趣,但这不是静态方法,我不能用它禁用所有声音...我的应用程序不以任何方式使用 Cocoa 音频服务...

标签: c++ objective-c cocoa


【解决方案1】:

添加到您的 NSView/NSWindow 子类

- (void)keyDown:(NSEvent *)theEvent {

并且在向上和向下键上例外,但对于其他 [super keyDown:theEvent];

我觉得有道理

【讨论】:

  • 这对我有用。当您不希望它发出哔哔声时,在 keyDown 中返回 nil。
  • 当你说添加这个到 NSView 时,你的意思是继承 NSView 的文件,对吧?
【解决方案2】:
  1. 创建一个 Cocoa 类,从 NSView 继承它
  2. 将其设置为 View 的类,而不是故事板中标准的灰显 NSView
  3. 将以下内容添加到您的子类实现中:
@implementation YourCustomNSView - (BOOL)acceptsFirstResponder { 返回是; } - (void)keyDown:(NSEvent *)theEvent { NSLog(@"keypress %@", theEvent); // [super keyDown:theEvent]; // 此行触发系统哔声错误,没有它就没有哔声 } @结尾

【讨论】:

    【解决方案3】:

    对我来说,以下是最佳解决方案:

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多