NSDocument и клавиатура (например, keyDown) - PullRequest
1 голос
/ 06 октября 2009

Я пытался читать документацию по Apple, но нигде не могу найти, как записать ключевое событие (пробел или другое) в приложение NSDocument.

С initialFirstRepsodner, если я хорошо понимаю, это невозможно сделать.

Есть идеи?

спасибо всем! Andrea

Ответы [ 5 ]

1 голос
/ 07 октября 2009

Я пытался читать документацию Apple, но нигде не могу найти, как записать ключевое событие (пробел или другое) в приложение NSDocument.

Для чего вы хотите обрабатывать ключевые события? Вам нужно реализовать keyDown: где-то, но где именно зависит от того, что вы собираетесь делать.

0 голосов
/ 04 ноября 2010

Прежде всего, вы должны создать подкласс NSWindow. В xcode сделайте: File -> New File -> Objective C Class. дать имя, как "NSWindowMyEvents". Это создаст 2 файла: .h & .m, перейдите к NSWindowMyEvents.h и сделайте объявление следующим образом:

@interface NSWindowMyEvents : NSWindow {

}

Сохраните изменения и скомпилируйте (чтобы убедиться, что IB читает новый заголовок 0, если он уже открыт).

Откройте конструктор интерфейса и загрузите файл nib / xib, содержащий ваш документ / главное окно. Убедитесь, что выход «окна» владельца файла настроен на ваше главное окно. Щелкните в главном окне (в котором вы хотите получать события) и установите его класс (с помощью инспектора идентификации cmd + 6) следующим: NSWindowMyEvents вместо NSWindow, как сейчас.

Сохранить изменения!

Вернитесь к xcode и NSWindowMyEvents.m и вставьте следующий код:

- (void)keyDown:(NSEvent *)theEvent
{
    NSLog(@"keyDown!");
    if ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask)
    {
        NSLog(@"CommandKey Down!");
    }

    [super keyDown:theEvent];
}

Отправьте событие супер, если хотите, чтобы передать событие в цепочку респондента остальных. Теперь вы обрабатываете события клавиатуры. Точно так же вы можете обработать любое событие в NSWindowMyEvent.m

Надеюсь, это поможет ....

0 голосов
/ 20 мая 2010

Я бы порекомендовал использовать NSUserDefaults и сохранить ваши общие глобальные комбинации клавиш, а затем проверить keyDown: с учетом этих сохраненных настроек и затем основывать свои действия на том, какая клавиша была нажата.

т.е.: #define kMyKeyCommand @ "i"

0 голосов
/ 09 октября 2009

Во-первых, я хотел бы поблагодарить Питера за помощь!

Я использовал горячую клавишу, и этот пример был очень полезен!

http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/

спасибо всем! Andrea

0 голосов
/ 06 октября 2009

Если вы хотите захватить все события, идущие в окно, вы можете создать его подкласс и переопределить -sendEvent :. Если вы хотите захватить все события во всем приложении, вы можете переопределить тот же метод в подклассе NSApplication.

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