2016-10-17 2 views
1

私はkeyDown経由でキーストロークを処理するアプリケーションを持っています。ObjectOS-C on MacOS - NSViewのShift + Tabキーダウンを取得

2つの問題を除いてこれまでのところうまくいきます(後でもう1つ質問します)。

ここでの問題は、Shift + Tabコンボです。私はそれを自分で処理したいのですが、Mac OS keyboard event docで説明されているように、フォーカスを前方に移動するために使用されます。

私は、TRUEまたはFALSEを返す、それのためにイベントを得るか

-(BOOL)performKeyEquivalent:(NSEvent *)nsevent 
{ 

} 

の下でそれをキャプチャしてみましたが、それはまだKeyDownイベントには表示されません。

は、私はまた、約selectNextKeyViewを知っている:しかし理想的には、システムにkeyDownに組み合わせを渡す方法を探しています:通常の処理(ちなみにkeyUp:は正しく呼び出されます)。

-(void)selectNextKeyView:(id)sender 
{ 
    // shift+tabbed 
} 

答えて

0

自分の質問に答える:

を私はselectNextKeyViewとselectPreviousKeyViewを傍受し、[NSApp currentEvent]私のキーボードハンドラ(他のすべてのキーのKeyDownイベントに呼ばれているもの)に転送することによってそれを解決しました

-(void)selectNextKeyView:(id)sender 
{ 
    // this is part of the keyboard handling. Cocoa swallows ctrl+Tab and 
    // calls sselectNextKeyView, so we create a matchin key event for the occasion 
    NSEvent *nsevent= [NSApp currentEvent]; 
    [self handleKeyEvent:nsevent isRaw:FALSE isUp:FALSE]; 
} 

-(void)selectPreviousKeyView:(id)sender 
{ 
    // this is part of the keyboard handling. Cocoa swallows ctrl+shift+Tab and 
    // calls selectPreviousKeyView, so we create a matchin key event for the occasion 
    NSEvent *nsevent= [NSApp currentEvent]; 
    [self handleKeyEvent:nsevent isRaw:FALSE isUp:FALSE]; 
} 
+0

これらのメソッドはShift + Tabだけでなく他の理由で呼び出される可能性があるため、これは理想的ではありません。 – Taylor

+0

さらに、TabキーとShift + Tabを使用してコントロールを操作するためにユーザーが使用されるため、他のキーの組み合わせを使用することを検討する必要があります。 – Taylor

関連する問題