2009-07-01 4 views
2

Ниже приведен пример кода.- (void) keyDown: (NSEvent *) событие не работает

- (void) keyDown: (NSEvent *) event 
{ 
    NSString *chars = [event characters]; 
    unichar character = [chars characterAtIndex: 0]; 

    if (character == 27) { 
     NSLog (@"ESCAPE!"); 
    } 
} 

Должен ли я установить какой-либо делегат в InterfaceBuilder или любой вид привязки?

Помощь Оценил ...

+2

Где находится ваш ключ: метод реализован? –

+0

Если нужно обработать escape-ключ, рассмотрите переопределение 'cancelOperation:' в подклассе 'NSResponder'. – Andriy

ответ

4

keyDown должен быть переопределен в NSView подклассу которого объект установлен в качестве первого ответчика. Цепочка ответчика должна передать событие, но, чтобы убедиться, что вы его получили, убедитесь, что ваш объект является первым ответчиком.

+0

Большое спасибо за эти ценные материалы ... – 2009-07-01 14:52:32

0

В какао только виды участвуют в цепочке ответчиков для этого события. Поэтому вы должны переопределить какой-либо метод просмотра. Легкий способ - выяснить, какой вид является первым ответчиком для конкретного события, которое вы хотите обработать и использовать.

окно отправляет keyDown(with:) прямо к первому ответчику, который мог бы с ним справиться или пройти до цепи ответчика. Не все представления передают события вверх. NSCollectionView не передает ключевое событие. Вместо этого он воспроизводит звук удара.

Также возможно, что ключ, который вы хотите обработать, равен Ключевой эквивалентread more here. Если это так, вы должны переопределить метод executeKeyEquivalent (with:) для получения этого типа событий. Эти события, в отличие от событий keyDown, передаются из окна во все подпункты, пока кто-то не обработает их.

Как упоминалось, метод NSCollectionView keyDown (with:) не передает ключевые события в цепочке ответчиков. Чтобы обрабатывать такие события в одном из супер-представлений, вы должны сначала перенести его в виде коллекции и отправить событие вручную, вызвав self.nextResponder? .keyDown (с: event) для таких событий, которые вы хотите обрабатывать самостоятельно.

Смежные вопросы