1. ホーム
  2. ios

[解決済み] UITapGestureRecognizerを持つビューの中のUIButton

2022-04-13 18:57:33

質問

を持つビューがあります。 UITapGestureRecognizer . そこで、このビューをタップすると、このビューの上に別のビューが表示されます。この新しいビューには、3つのボタンがあります。これらのボタンの1つを押しても、ボタンのアクションは得られず、タップジェスチャのアクションが得られるだけです。そのため、これらのボタンはもう使えません。これらのボタンにイベントを送るには、どうしたらよいでしょうか?変なのは、ボタンがまだハイライトされることです。

UITapGestureRecognizerのタップを受信した後、それを削除することはできません。なぜなら、新しいビューも一緒に削除される可能性があるからです。つまり フルスクリーンビデオコントロールのような動作 .

解決方法は?

コントローラまたはビュー(ジェスチャー認識器を作成する方)のデリゲートを UITapGestureRecognizer . そして、そのデリゲートで -gestureRecognizer:shouldReceiveTouch: . 実装では、タッチが新しいサブビューに属するかどうかをテストし、属する場合はそれを無視するようにジェスチャー認識装置に指示することができます。次のようなものです。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // test if our control subview is on-screen
    if (self.controlSubview.superview != nil) {
        if ([touch.view isDescendantOfView:self.controlSubview]) {
            // we touched our control surface
            return NO; // ignore the touch
        }
    }
    return YES; // handle the touch
}