45

以下をUIScrollView使用してUIオーバーレイを表示/非表示にするシングルタップジェスチャ認識機能を追加しました。

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[scrollView addGestureRecognizer:singleTap];

と:

- (void)handleTap:(UITapGestureRecognizer *)sender {
    // report click to UI changer
}

の下部に簡単なテーブル ビューを追加しましたUIScrollView。すべてが正しく機能します (水平方向と垂直方向の両方のスクロール) が、問題は、タップがジェスチャ レコグナイザー (上記) によってのみ認識され、簡単なテーブル ビューでは認識されないことです。ジェスチャリスナーを登録する行を削除すると、すべてが正常に機能し、テーブルビューはそれ自体をタップします。

あたかもジェスチャ認識関数がテーブル ビューのタップ イベントを「食べて」、それらを下方に伝達しないかのようです。

どんな助けでも大歓迎です

4

9 に答える 9

82

これで問題が解決するはずです。
UIScrollView および UIView のコンポーネント [UIScrollView 内に配置される] でタッチ イベントを検出し
ます。cancelsTouchesInViewこれを行うには、singleTap のプロパティをに設定する必要があります。NOこれはYESデフォルトです。

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
singleTap.cancelsTouchesInView = NO;
[scrollView addGestureRecognizer:singleTap]; 
于 2013-06-02T16:56:21.583 に答える
9

その理由は、UIImageViewUser Interaction Enabledに設定されているためだと思います。falseタップを有効にするには、trueに設定する必要があります

于 2016-05-20T00:21:34.117 に答える
6

You can set which objects are to be included/excluded for touches.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch {            
   if (touch.view == [self view]) {
       return YES;
   }
   return NO;
}
于 2013-06-02T17:42:40.070 に答える
3

ありがとう@ザンブリー

スウィフト 2.2+ バージョン:

scrollView.delegate = self

let allowMultipleTouches = UITapGestureRecognizer(target: self, action: #selector(genderPressed))
allowMultipleTouches.numberOfTapsRequired = 1
allowMultipleTouches.cancelsTouchesInView = false

scrollView.addGestureRecognizer(allowMultipleTouches)

スクロール ビューがストーリーボードにある場合は、ビュー コントローラーにアウトレットを固定することを忘れないでください。この例では、scrollViewは のアウトレットですUIScrollView

于 2016-07-28T11:15:23.093 に答える
2

TapGestures は私のために働いた。一方、スワイプはスクロールを無効にする必要があり、機能しました。

swipeLeftGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:)))
swipeLeftGesture.direction = .left
scrollView.addGestureRecognizer(swipeLeftGesture)

swipeRightGesture = UISwipeGestureRecognizer(target: self, action: #selector(swipeToNewImage(_:)))
scrollView.addGestureRecognizer(swipeRightGesture)

scrollView.isScrollEnabled = false
于 2017-01-12T16:30:11.417 に答える