1

Appleのドキュメントを読み込もうとしましたが、キーイベント(スペースまたはその他)をNSDocumentアプリケーションにキャプチャする方法がどこにも見つかりません。

initialFirstRepsodnerでは、よく理解していればそれは不可能です。

何か案が?

ありがとうございます!アンドレア

4

5 に答える 5

1

Appleのドキュメントを読み込もうとしましたが、キーイベント(スペースまたはその他)をNSDocumentアプリケーションにキャプチャする方法がどこにも見つかりません。

重要なイベントを何のために処理したいですか?どこかに実装する必要がありますkeyDown:が、正確にはどこに実装するかによって異なります。

于 2009-10-07T02:51:05.387 に答える
0

ウィンドウに送信されるすべてのイベントをキャプチャする場合は、ウィンドウをサブクラス化して-sendEvent:をオーバーライドできます。アプリ全体のすべてのイベントをキャプチャする場合は、NSApplicationサブクラスの同じメソッドをオーバーライドできます。

于 2009-10-06T17:17:03.500 に答える
0

まず、ピーターの助けに感謝します!

私はホットキーを使用しましたが、このサンプルは非常に役に立ちました。

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

ありがとうございます!アンドレア

于 2009-10-09T19:33:47.283 に答える
0

まず、NSWindowのサブクラスを作成する必要があります。xcodeでは、[ファイル]->[新しいファイル]->[ObjectiveCクラス]を実行します。「NSWindowMyEvents」のような名前を付けます。これにより、2つのファイルが作成されます:.hと.m、NSWindowMyEvents.hに移動し、次のように宣言します。

@interface NSWindowMyEvents : NSWindow {

}

変更を保存してコンパイルします(IBが新しいヘッダー0を既に開いている場合は、それを確実に読み取るようにします)。

Interface Builderを開き、ドキュメント/メインウィンドウを含むnib/xibファイルをロードします。ファイルの所有者の「ウィンドウ」アウトレットがメインウィンドウに設定されていることを確認します。メインウィンドウ(イベントを取得するウィンドウ)をクリックし、そのクラスを(Identity inspector cmd + 6を介して)現在のNSWindowではなくNSWindowMyEventsに設定します。

変更内容を保存!

xcodeとNSWindowMyEvents.mに戻り、次のコードを貼り付けます。

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

    [super keyDown:theEvent];
}

必要に応じてイベントをスーパーに送信し、残りのレスポンダーチェーンにイベントを渡します。現在、キーボードイベントを処理しています。同様に、NSWindowMyEvent.mで任意のイベントを処理できます

お役に立てば幸いです。

于 2010-11-04T19:59:37.070 に答える
-1

NSUserDefaultsを使用し、共有グローバルキーコンボを保存してから、keyDown:をそれらの保存された設定と照合し、どのキーが押されたかに基づいてアクションを実行することをお勧めします。

すなわち:#define kMyKeyCommand @ "i"

于 2010-05-19T22:02:40.680 に答える