Как отключить звуки клавиатуры в приложении Какао?

У меня проблема с моим приложением OpenGL Cocoa - каждый раз, когда происходит событие keyUp / KeyDown, воспроизводится системный звук... Как отключить эту логику для моего приложения?

У меня плохое предчувствие, что по какой-то странной причине мое приложение может воспринимать нажатие клавиши как ошибку и воспроизводить звуковой сигнал системы... Пожалуйста, помогите!

4 ответа

Решение

Добавить в ваш подкласс 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
}
  1. Создайте Класс Какао, подклассифицируя его из NSView
  2. Установите его как класс для вашего View вместо стандартного серого NSView в раскадровке
  3. Добавьте следующее к вашей реализации подкласса:
@implementation YourCustomNSView

- (BOOL) acceptFirstResponder {
    вернуть ДА;
}

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

    NSLog (@"нажатие клавиши%@", событие);
//    [super keyDown:theEvent]; // эта строка вызывает системный звуковой сигнал, без него нет звукового сигнала
}

@конец

Решение Swift 5.6

Это вызвано необработанными событиями нажатия клавиш в вашей цепочке респондентов.

Убедитесь, что какой-то подкласс NSView в вашей цепочке респондентов переопределяет это и возвращает true.

      override performKeyEquivalent(with event: NSEvent) -> Bool {}
Другие вопросы по тегам