8

UIGestureRecognizerクラスのジェスチャーを追跡するためにカスタムサブクラスを使用していInfoViewます。このクラスは、と呼ばれるカスタムサブクラスInfoViewのサブビューです。UITableViewCellInfoCell

ルートビューにジェスチャレコグナイザーを追加しました(カスタムジェスチャレコグナイザーの目的はInfoCell テーブル間でビューをドラッグできるようにすることであるため、画面上の他のすべての親ビューです)。これで、1つを除いて、すべてが正常に機能します。サブクラスで次のコードを使用して、ビューUIGestureRecognizerのタッチを検出しています。InfoView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UIView *touchView = [[touches anyObject] view];
    if ([touchView isKindOfClass:[InfoView class]]) {
        // Do stuff
    }

ここでの問題は、オブジェクトへのタッチがインターセプトされているため、の親ビューであるを含むInfoViewに転送されていないことです。これは、ビューをドラッグしてテーブルビューをスクロールできなくなったことを意味します。これは、カバーが全体をカバーしているため、問題になります。UITableViewInfoCellInfoViewInfoViewInfoViewInfoCell

タッチをテーブルビューに転送してスクロールできるようにする方法はありますか?私はすでにたくさんのことを試しました:

[super touchesBegan:touches withEvent:event];

[touchView.superview.superview touchesBegan:touches withEvent:event];touchView.superview.superviewその親への参照を取得しますUITableView

しかし、これまでのところ何も機能していません。また、cancelsTouchesInView私のプロパティUIGestureRecognizerはに設定されてNOいるので、タッチに干渉しません。

ヘルプをいただければ幸いです。ありがとう!

4

4 に答える 4

26

UIGestureRecognizerDelegate メソッドを確認してください。- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

これが YES を返した場合、スクロールを検出するために UIScrollView が使用しているジェスチャ レコグナイザを踏みにじるのを防ぎます。

于 2010-10-29T04:20:47.630 に答える
9

UIGestureRecognizer には、デフォルトで YES に設定されているプロパティ「cancelsTouchesInView」があります。これは、ジェスチャーが認識されると、UIView のタッチがキャンセルされることを意味します。UIScrollView がさらにタッチ イベントを受信できるようにするには、NO に設定してみてください。

于 2010-07-30T09:40:40.087 に答える
3

メソッドに、ジェスチャレコグナイザーtouchesBeganのプロパティをに設定する行がありました。この行を削除すると、問題が解決するようです。stateUIGestureRecognizerStateBegan

于 2010-07-21T00:41:21.987 に答える
3

この通知を追加してみてください

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if ([gestureRecognizer class] == [UIPanGestureRecognizer class]) {
        UIPanGestureRecognizer *panGestureRec = (UIPanGestureRecognizer *)gestureRecognizer;
        CGPoint point = [panGestureRec velocityInView:self];
        if (fabsf(point.x) > fabsf(point.y) ) {
            return YES;
        }
    }
    return NO;
}
于 2013-08-28T05:14:53.000 に答える