1

Cocoa アプリケーションを作成しており、グローバル ホットキー機能を実装したいと考えています。Waffle Software の ShortcutRecorder.framework を実装し、xib に customView を追加しました。次に、CustomView を SRRecorderControl にサブクラス化しました。ウィンドウに Recorder が表示されるようになりましたが、KeyCombo を取得するにはどうすればよいでしょうか。

キーコードを取得できずに keyComboDidChange メソッドを実装しました。私は何を間違っていますか?

キーコードを取得するための私のコードは次のとおりです。

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

ショートカットレコーダーは私のIBOutletです。

プロトコルや setDelegate:self などを実装する必要がありますか?

編集して追加

実際には、Preferences.h で自分の ShortcutRecorder アウトレットを宣言しました。次に、Identity Inspector で「Preferences」をファイル所有者のカスタム クラスとして配置し、デリゲートをショートカット レコーダーに接続します...しかし、keyComboDidChange は決して呼び出されません...理由がわかりません。

4

2 に答える 2

1

それを機能させるために私が取った手順を説明しましょう:

  • ウィンドウ 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 に簡単に保存して、アプリケーションを起動するたびにそれらをロードできます。

于 2011-10-22T08:17:12.783 に答える
0

実際には、Preferences.h で自分の ShortcutRecorder アウトレットを宣言しました。次に、Identity Inspector で、「Preferences」をファイル所有者のカスタム クラスとして配置し、デリゲートをショートカット レコーダーに接続します...しかし、keyComboDidChange は決して呼び出されません...理由がわかりません-.-

于 2011-10-22T15:06:22.120 に答える