2012-06-22 5 views
9

ボタン以外がタップされていると消えたいボタンがあります。だから私は、目標を設定します。アクション:削除ボタン用:含むビューをタップジェスチャー認識を追加することにより、後に続くボタンタップイベントはタップジェスチャー認識ツールでオーバーライドされますか?

[self.deleteButton addTarget:self action:@selector(deleteButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 

[self.superview addGestureRecognizer:self.tapOutsideDelete]; 

私はこれを行うと、deleteButtonのアクションがありますボタンタップが認識されないかのように実行されません。この場合、ジェスチャ認識機能は動作します。しかし、deleteButtonをタップしても動作します。これは、タップジェスチャ認識機能がボタンタップよりも優先されていると思うようになります。

ジェスチャ認識機能を削除すると、deleteButtonが正しく機能します。

明らかに、これら2つのイベントを一緒に処理する方法を理解できません。私は何をする必要がありますか?

(deleteButtonはテーブルビューセルの削除ボタンを模倣していますが、この場合はヘッダービューにあります)テーブルのどこかをタップすると削除ボタンが消えるようにするメソッドを呼び出すと思いますボタン自体、セル内での動作と同じように)

+0

:あなたはgestureRecognizer:shouldReceiveTouch:メソッドを実装する必要があります。これはヘッダービューではなく、ヘッダービューを含むtableviewに追加します。これは、ヘッダービューではなく、意図したものとは異なる場合があります。 – MusiGenesis

+0

[ジェスチャ認識機能とボタン操作]の複製が可能(http://stackoverflow.com/questions/4825199/gesture-recognizer-and-button-actions) –

答えて

12

はい、タップジェスチャーはタップで最初にクラックを取得します。 (それは、View Controllerの場合はself.view)あなたは自分の代わりにself.superviewするジェスチャー認識を追加すごみのビットを得ることができます

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
      shouldReceiveTouch:(UITouch *)touch { 

    if (touch.view == self.deleteButton) { 
     return NO; 
    } 
    return YES; 
} 
+2

ありがとうございました。これは完全に機能しました。それは、これがUIGestureRecognizerDelegateプロトコルのデリゲートメソッドであることを発見するために少し掘り下げたので、デリゲートポインタも設定する必要があります。 – Jim

+0

@ジム:申し訳ありませんが、私はそれを追加しようとしていました。どのようにWeb上の多くのiOSチュートリアルなどに、ソリューションに必要なすべての情報が*含まれていないのか、それに困惑しています。 – MusiGenesis

関連する問題