2017-08-28 11 views
0

私のMacアプリケーションでは、キープレスイベントを聞き、モディファイアやキーコードに応じて内部クライアントに渡します。NSViewでCtrl + Tabキーダウンイベントを取得できません

現在、私は "Ctrl + Tab"イベントを保留できないという問題に直面しています。 「App」自体がこれを処理しようとしているようですが、これはタブベースのアプリケーションにとっては意味があります。だから私はTabbingmodeを無効にしたが、Ctrl + TabはKeyDownイベントを起こさない。キーコードとモディファイアの他の組み合わせはうまくいっているようです。

Ctrl + Tabキーダウンイベントの発生方法を教えてください。

+0

NSEventModifierFlagsを使用します。 –

答えて

1

私のテストでは、NSView-keyDown:メソッドは、コントロールタブのキーイベントのサブクラスではNSViewサブクラスで呼び出されていないようです。ただし、アプリケーションレベルでNSApplicationサブクラスを使用してこれらを傍受することができます。

@interface MyApplication: NSApplication 
@end 

@implementation MyApplication 

- (void)sendEvent:(NSEvent *)event { 
    if (event.type == NSEventTypeKeyDown && 
     [event.charactersIgnoringModifiers isEqualToString:@"\t"] && 
     (event.modifierFlags & NSEventModifierFlagDeviceIndependentFlagsMask) == NSEventModifierFlagControl) { 
     NSLog(@"ctrl-tab"); 
    } 

    [super sendEvent:event]; 
} 

@end 
+0

キーイベントを関係するビューオブジェクトのどこにでも置いておきたい場合を除き、それはひどく悪い考えです。 –

+0

イベントを処理するときに正しい条件をチェックするためのコードを追加する必要があります。残りの時間はsuperの実装を呼び出します。それは原油ですが、それは私がOPがキャプチャしたいキーストロークをキャプチャするために見つけた唯一の方法です。 –

+0

ありがとうございます。それは正しい方向に私を指摘した。面白いのは、実際にNSWindowDelegateというNSViewのkeyDownイベントを取得するためにNSWindowもオーバーライドしなければならないということです。チェイン内のすべてのインスタンスがCtrl + Tabを避けようとしているようです。 – Steve

関連する問題