Как отключить звуки клавиатуры в приложении Какао?
У меня проблема с моим приложением 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
}
- Создайте Класс Какао, подклассифицируя его из NSView
- Установите его как класс для вашего View вместо стандартного серого NSView в раскадровке
- Добавьте следующее к вашей реализации подкласса:
@implementation YourCustomNSView - (BOOL) acceptFirstResponder { вернуть ДА; } - (void)keyDown:(NSEvent *)theEvent { NSLog (@"нажатие клавиши%@", событие); // [super keyDown:theEvent]; // эта строка вызывает системный звуковой сигнал, без него нет звукового сигнала } @конец
Решение Swift 5.6
Это вызвано необработанными событиями нажатия клавиш в вашей цепочке респондентов.
Убедитесь, что какой-то подкласс NSView в вашей цепочке респондентов переопределяет это и возвращает true.
override performKeyEquivalent(with event: NSEvent) -> Bool {}