8

我正在使用自定义UIGestureRecognizer子类来跟踪课堂上的手势InfoView。该类InfoView是一个UITableViewCell名为 的自定义子类的子视图InfoCell

我已将手势识别器添加到我的根视图(屏幕上其他所有内容的父视图,因为我的自定义手势识别器的目的是允许InfoCell 在表格之间拖动视图)。现在,除了一件事,一切都按原样进行。我在我的UIGestureRecognizer子类中使用以下代码来检测视图上的触摸InfoView

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

这里的问题是对象上的触摸InfoView被拦截,因此它们没有被转发到UITableView包含 的InfoCell,这是 的父视图InfoView。这意味着我不能再通过拖动视图来滚动表格视图InfoView,这是一个问题,因为InfoView覆盖了整个InfoCell.

有什么办法可以将触摸转发到表格视图上以便它可以滚动?我已经尝试了很多东西:

[super touchesBegan:touches withEvent:event];

[touchView.superview.superview touchesBegan:touches withEvent:event];touchView.superview.superview获取对其父级的引用UITableView

但到目前为止没有任何效果。此外,cancelsTouchesInViewmyUIGestureRecognizer的属性设置为NO,因此不会干扰触摸。

帮助表示赞赏。谢谢!

4

4 回答 4

26

查看 UIGestureRecognizerDelegate 方法:- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

如果返回 YES,它将阻止您的手势识别器踩到 UIScrollView 用于检测滚动的手势识别器。

于 2010-10-29T04:20:47.630 回答
9

UIGestureRecognizer 有一个属性“cancelsTouchesInView”,默认设置为 YES。这意味着当手势被识别时,UIView 中的触摸被取消。尝试将其设置为 NO 以允许 UIScrollView 接收更多的触摸事件。

于 2010-07-30T09:40:40.087 回答
3

我的touchesBegan方法中有一行state将手势识别器的属性设置为UIGestureRecognizerStateBegan. 删除此行似乎可以解决问题。

于 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 回答