-shortcutRecorder: keyComboDidChange: не выполняется - PullRequest
1 голос
/ 21 октября 2011

Я пишу приложение Какао, и я хотел бы реализовать глобальную функцию горячих клавиш.Я реализовал ShortcutRecorder.framework от Waffle Software и добавил customView к моей xib.Затем я вложил в CustomView для SRRecorderControl.Теперь я вижу Рекордер в своем Окне, но как я могу получить KeyCombo и как я могу реагировать на это?

Я реализовал метод keyComboDidChange, но мне не удалось получить код ключа.Что я делаю не так?

Вот мой код для получения кода ключа:

- (void)shortcutRecorder:(SRRecorderControl *)aRecorder keyComboDidChange:(KeyCombo)newKeyCombo
{
    if (aRecorder == shortcutRecorder)
    {
        NSLog{"We got a new Key Combo");
    }
}

shortcutrecorder - это мой IBOutlet, кстати.

Должен ли я реализовать протокол илиsetDelegate: self или что-то в этом роде?

Отредактировано для добавления

На самом деле я объявил свой выход shortcutRecorder в моем Preferences.h.Затем в Identity Inspector я добавляю «Preferences» в качестве пользовательского класса для владельца файлов и подключаю делегата к своему Shortcut Recorder ... но никогда не вызывается keyComboDidChange ... Я не понимаю, почему.

Ответы [ 2 ]

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

Позвольте мне объяснить, какие шаги я предпринял, чтобы заставить его работать:

  • Создать окно xib
  • Владельцем файла этого класса в моем случае является PreferencesWindowController
  • Создайте ссылочный выход из окна для владельца файла, щелкнув правой кнопкой мыши окно и перетащив его на владельца файла
  • Добавить пользовательский вид в ваше окно
  • Вы должны подключить делегата ShortcutRecorder к «Владельцу файла». Для этого щелкните правой кнопкой мыши SRRecorderControl и перетащите делегата к «Владельцу файла» слева от вас.

После этого: ShortcutRecorder только записывает горячую клавишу и оставляет вам, что с ней делать. Вам нужно использовать PTHotKeyCenter (который поставляется с ShortcutRecorder), или вы могли бы реализовать обработку ярлыков самостоятельно.

ShortcutRecorder содержит отличную демонстрацию, которая демонстрирует использование ShortcutRecorder в сочетании с PTHotKeyCenter. Это работает так:

  • Прослушивание событий из ShortcutRecorder (что вы уже делаете, но без установки делегата)
  • Проверьте, установлена ​​ли переменная globalHotKey
  • Если это так, выгрузить предыдущую горячую клавишу
  • Инициируйте новую горячую клавишу с настройками из ShortcutRecorder
  • Установите цель и действие, чтобы фактически захватить горячую клавишу, после нажатия
  • Сохранить горячую клавишу в общем центре (с этого момента горячая клавиша будет работать)

Маленький образец, из их источника:

if (globalHotKey != nil)
{
    [[PTHotKeyCenter sharedCenter] unregisterHotKey: globalHotKey];
    [globalHotKey release];
    globalHotKey = nil;
}

globalHotKey = [[PTHotKey alloc] initWithIdentifier:@"SRTest"
                                           keyCombo:[PTKeyCombo keyComboWithKeyCode:[shortcutRecorder keyCombo].code
                                                                          modifiers:[shortcutRecorder cocoaToCarbonFlags: [shortcutRecorder keyCombo].flags]]];

[globalHotKey setTarget: self];
[globalHotKey setAction: @selector(hitHotKey:)];

[[PTHotKeyCenter sharedCenter] registerHotKey: globalHotKey];

Осталось только обработчик горячей клавиши:

- (void)hitHotKey:(PTHotKey *)hotKey
{
    NSLog(@"Hotkey pressed!");
}

Вы можете легко сохранить настройки горячих клавиш в UserDefaults, чтобы загружать их при каждом запуске приложения.

0 голосов
/ 22 октября 2011

На самом деле я объявил свой выход shortcutRecorder в моем Preferences.h.Затем в Identity Inspector я помещаю «Preferences» в качестве пользовательского класса для владельца файлов и подключаю делегата к своему Shortcut Recorder ... но никогда не вызывается keyComboDidChange ... Я не понимаю, почему -.-

...