NSMenuItem и голый эквивалент клавиши esc - PullRequest
0 голосов
/ 14 июля 2010

Я пытаюсь связать простое нажатие клавиши esc с NSMenuItem, который переключает полноэкранный режим (в настоящее время это просто функция-заглушка). Выбор пункта меню вручную отправляет желаемое действие IBAction. Когда я устанавливаю ключевой эквивалент NSMenuItem. в Интерфейсном Разработчике к произвольному голому ключу (например, w) эта команда ключа отправляет желаемое действие IBAction. Когда я установил Key Equiv. на команду + esc, эта ключевая команда отправляет желаемый IBAction. Но простое нажатие клавиши esc игнорируется.

Я предполагаю, что клавиша esc имеет специальный регистр. Другие приложения (например, различные эмуляторы Баннистера) способны достичь этого, любая идея, как?

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

Я не ветеран Objective-C, поэтому извиняюсь, если я неправильно понял вопрос.Но вы пытались продвинуться по цепочке респондента и получить событие keyDown в NSWindow?Что-то вроде:

- (void)keyDown: (NSEvent *) event {
   if ([event keyCode] == 53) {
        NSLog(@"Esc. pressed");
     }
}

Конечно, это решение потребует от вас подкласса NSWindow.

1 голос
/ 15 октября 2011

Клавиша Escape тесно связана с классом cancelOperation NSResponder.

Попробуйте создать подкласс вашего NSWindow и укажите для него следующий метод:

- (void)cancelOperation:(id)sender {
  if (![SomeController doSomeAction]) {
    [super cancelOperation:sender];
  }
}

Ваше окно будет реагировать на клавишу Escape и вызывать doSomeAction. Это был бы метод, который ваш NSMenuItem хотел бы вызвать, но он отказался это сделать:)

В методе doSomeAction вы должны вернуть логическое значение, указывающее, действительно ли действие действительно что-то сделало. Если это так, хорошо. Если этого не произошло (и было возвращено NO), ваш NSWindow передаст событие Escape-ключ следующему респонденту в цепочке.

Мне нравится это решение, потому что оно дает пользователю звуковую обратную связь о том, действительно ли его нажатие клавиши что-то сделало. Потому что, если ваш метод ничего не делал, и никакой другой репсондер ничего не делал, будет какой-то "звуковой сигнал".

Обратите внимание, что в NSView без прикрепленного окна вам, возможно, придется использовать [self nextResponder] вместо super.

0 голосов
/ 15 июля 2010

Пожалуйста, посмотрите на http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGUserInput/XHIGUserInput.html «… Клавиша« Esc »(Escape) в основном означает« выпустить меня отсюда ». В определенных контекстах она имеет определенные значения. Пользователь может нажать Esc в следующих ситуациях:… ”

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...