Cocoa touch UIgestureRecognitor阻止表视图滚动

Cocoa touch UIgestureRecognitor阻止表视图滚动,cocoa-touch,uiview,ipad,uigesturerecognizer,Cocoa Touch,Uiview,Ipad,Uigesturerecognizer,我正在使用一个自定义的UIgestureRecognitor子类来跟踪InfoView类中的手势。InfoView类是名为InfoCell的自定义UITableViewCell子类的子视图 我已将我的手势识别器添加到我的根视图(屏幕上所有其他内容的父视图,因为我的自定义手势识别器的目的是允许在表之间拖动InfoCell视图)。现在,除了一件事,一切都正常运转。我在UIgestureRecognitizer子类中使用以下代码来检测InfoView视图上的触摸: - (void)touchesBeg

我正在使用一个自定义的
UIgestureRecognitor
子类来跟踪
InfoView
类中的手势。
InfoView
类是名为
InfoCell
的自定义
UITableViewCell
子类的子视图

我已将我的手势识别器添加到我的根视图(屏幕上所有其他内容的父视图,因为我的自定义手势识别器的目的是允许在表之间拖动
InfoCell
视图)。现在,除了一件事,一切都正常运转。我在
UIgestureRecognitizer
子类中使用以下代码来检测
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

是否有任何方法可以将触摸转发到表格视图,以便它可以滚动?我已经尝试了很多方法:

[超级触摸开始:触摸事件:事件]

[touchView.superview.superview touchsbegind:touchswithevent:event]
touchView.superview.superview
获取对其父级的引用
UITableView

但到目前为止,一切都不起作用。此外,my
UIgestureRecognitor
cancelsTouchesInView
属性设置为
NO
,因此不会干扰触摸


谢谢你的帮助。谢谢

我的
touchsbegind
方法中有一行代码将手势识别器的
state
属性设置为
UIgestureRecognitizerStateSbegind
。删除这一行似乎可以解决问题。

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

检查UIgestureRecognitizer委托方法:
-(BOOL)GestureRecognitizer:(UIgestureRecognitizer*)GestureRecognitizer应与GestureRecognitizer:(UIgestureRecognitizer*)OtherGestureRecognitizer同时识别


如果返回YES,将阻止您的手势识别器在UIScrollView用于检测滚动的手势识别器上跺脚。

您可以尝试添加此通知

- (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;
}

在这件事上,我的头一直撞在墙上。谢谢D这是正确的答案,如果手势是垂直的,请防止泛感觉开始。