10

ボタン以外をタップすると消えさせたいボタンがあります。だから私は削除ボタンのtarget:action:を設定しました:

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

その後、含まれているビューにタップジェスチャレコグナイザーを追加します。

[self.superview addGestureRecognizer:self.tapOutsideDelete];

これを行うと、ボタンタップが認識されないかのように、deleteButtonのアクションが実行されません。この場合、ジェスチャレコグナイザは機能します。ただし、deleteButtonをタップした場合にも機能します。これにより、タップジェスチャレコグナイザーがボタンタップよりも優先されると思います。

ジェスチャレコグナイザーを削除すると、deleteButtonは正しく機能します。

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

(deleteButtonはテーブルビューセルの削除ボタンを模倣していますが、この場合はヘッダービューにあります。ボタン自体を除いてテーブル内の任意の場所をタップすると、削除ボタンを非表示にするメソッドを呼び出すことを期待しています。セルで機能するのと同じ方法です。)

4

1 に答える 1

14

はい、タップジェスチャはタップで最初にクラックされます。gestureRecognizer:shouldReceiveTouch:次のメソッドを実装する必要があります。

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

    if (touch.view == self.deleteButton) {
        return NO;
    }
    return YES;
}
于 2012-06-22T22:35:11.473 に答える