2013-12-10 11 views
10

Mac OS Xでは、単語を3本指でタップすると、その単語の定義がウィンドウに表示されます。NSTextViewで3本指のタップ動作を無効にするにはどうすればよいですか?

Image showing a pop up window showing a word definition.

このイディオムはシンボル上で3本の指でタップをしていることは非常にそれは+をクリックALTされていた場合と同様に、そのマニュアルを示してXcodeの、で使用されています。私のアプリケーションのユーザーがNSTextViewで特定のトークンに3本指タップを行う際

Image showing a pop up window showing symbol documentation.

私は、ディスプレイの定義に似た何かをしたいと思います。しかし、私はタップが3本の指で行われたことを検出する方法を見つけることができません。誰かが私を助けることができますか?

EDITこれは誰にも何かを思い出させる場合は、タップのこの種行う際に、([NSApplication sendEvent:]をオーバーライドすることによってキャッチ)の3つのイベントがトリガされます。

NSEvent: type=SysDefined loc=(270.918,250.488) time=417954.6 flags=0x100 win=0x0 winNum=28293 ctxt=0x0 subtype=6 data1=1818981744 data2=1818981744 
NSEvent: type=SysDefined loc=(270.918,250.488) time=417954.6 flags=0x100 win=0x0 winNum=28293 ctxt=0x0 subtype=9 data1=1818981744 data2=1818981744 
NSEvent: type=Kitdefined loc=(0,263) time=417954.8 flags=0x100 win=0x0 winNum=28306 ctxt=0x0 subtype=4 data1=1135411200 data2=1132691456 

答えて

7

NSTextViewでトリプルタップに反応させる最も簡単quickLookWithEvent:をオーバーライドすることによって行うことができます。この記事のサンプルに基づいて、ここでは(8-5をリストから)有用なはずであるいくつかのコードです。

また、クイックルックを呼び出すために何かをタップすることができます。

+0

は数ヶ月遅れていますが、 'quickLookWithEvent:'は[NSResponder'が10.8である]として文書化されています(https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes)。 /NSResponder_Class/Reference/Reference.html#//apple_ref/occ/instm/NSResponder/quickLookWithEvent :) – andlabs

+0

ああ、甘い。私はちょうどそれを逃したと思う。 – zneak

2

サブクラスNSTextViewやマウスを上下上書きイベントを(これはビューは通常、クリック/タップのイベントを処理します)。

-(void)mouseDown:(NSEvent*)event 
{ 
    if (event.clickCount == 3) 
    { 
    //Do your thing 
    } 
} 

希望します。

トリプルクリックが機能しない場合(私が現在Macからチェックしていない)、何か別のものを試すことができます。 iOSで動作することは分かっていますが、トラックパッドの動作についてはわかりません。

あなたはあなたのビューにUITapGestureRecognizerを追加してみてください:

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)]; 
tapGesture.numberOfTouchesRequired = 3; 

//.... 

-(void)viewTapped:(UITapGestureRecognizer*)tap 
{ 
    if(tap.state == UIGestureRecognizerStateRecognized) 
    { 
    //you detected a three finger tap, do work 
    } 
} 

LATER EDIT:

を私はリンゴのドキュメントにthis articleを発見しました。

- (void)touchesBeganWithEvent:(NSEvent *)event { 
    if (!self.isEnabled) return; 

    NSSet *touches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self.view]; 

    if (touches.count == 3) 
    { 
     //Three finger touch detected 
    } 

    [super touchesBeganWithEvent:event]; 
} 
+0

あなたの 'mouseDown:'の例は3回連続してタップするのには有効ですが、3本の指で作られたタップはキャッチしません。 – zneak

+0

@zneak私はそれがかなり速かったので、2番目の部分を追加しました。私はトラックパッドで利用できるなら、あなたの問題に対する解決策につながると本当に思っています。しかし、私はアップルのドキュメンテーションの中で私が私の答えに編集しているものを見つけました。 – nestedloop

関連する問題