Звуковой сигнал об ошибке Silence Cocoa

У меня есть приложение Cocoa, которое фиксирует нажатия клавиш через настраиваемое представление в иерархии представлений. В этом представлении реализованы методы keyUp и keyDown, и принимаются нажатия клавиш. Несмотря на это, Cocoa по-прежнему настаивает на воспроизведении звука системной ошибки каждый раз, когда я нажимаю клавишу. Любые решения?

Примечание. Хотя я пытался сделать это представление первым ответчиком, это не сработало. Это может иметь какое-то отношение к этому.


person Linuxios    schedule 22.11.2012    source источник


Ответы (1)


Если вы безуспешно пытались сделать представление первым отвечающим, это, скорее всего, связано с тем, что NSView возвращает NO для acceptsFirstResponder. Вы можете заставить свой NSView подкласс переопределить acceptsFirstResponder, чтобы вернуть YES:

- (BOOL)acceptsFirstResponder {
    return YES;
}

Это должно устранить звуковые сигналы. В качестве альтернативы вы могли бы иметь подкласс NSView, переопределяющий метод performKeyEquivalent: NSResponder, чтобы возвращать YES, что также должно устранить NSBeeps:

- (BOOL)performKeyEquivalent:(NSEvent *)event {
    return YES;
}

ОБНОВИТЬ:

Не уверен, что предложить. На самом деле я написал приложение «Помощник по очистке клавиатуры», которое в основном предназначено для того, чтобы делать что-то похожее на то, что вы хотите. (Я использовал его на своем ноутбуке, когда хотел почистить клавиатуру, и сотни нажатий клавиш не приводили к случайному переименованию файлов или повторяющимся звуковым сигналам об ошибках).

Пример проекта: http://www.markdouma.com/developer/KeyboardCleanerHelper.zip

Запустив это приложение, я вообще не могу заставить его издавать звуковой сигнал (вызовы уведомлений регистрируются в консоли).

person NSGod    schedule 22.11.2012
comment
Сейчас acceptsFirstResponder? Ух ты. Я сейчас не на своем Mac, но я попробую и приму. Спасибо за ответ на эту надоедливую проблему. - person Linuxios; 23.11.2012
comment
@Linuxios: что ты имеешь в виду под "сейчас acceptsFirstResponder"? Что это было раньше? Или вы, возможно, имеете в виду метод, который вы использовали, чтобы попытаться сделать представление первым ответчиком? - person NSGod; 23.11.2012
comment
Я думал, что это canBecomeFirstResponder. Я сейчас на своем Mac, я попробую. - person Linuxios; 23.11.2012
comment
Нет сигары, я пробовал и то, и другое, и ни одно из них не работает. CNN вы думаете о чем-нибудь еще? - person Linuxios; 23.11.2012
comment
Кстати, я заставил его работать, добавив NSTextView в свой интерфейс. странный. - person Linuxios; 24.11.2012
comment
- (BOOL) PerformKeyEquivalent: (NSEvent *) событие ‹- Это работает для меня. Спасибо. - person Tommy; 20.03.2016