2010-07-20 61 views
7

我正在使用自定义UIGestureRecognizer子类跟踪我的InfoView类中的手势。 InfoView类是名为InfoCell的自定义UITableViewCell子类的子视图。UIGestureRecognizer阻止表视图滚动

我已经将我的手势识别器添加到了我的根视图(屏幕上所有其他视图的父视图,因为我的自定义手势识别器的用途是允许在表之间拖动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

但迄今没有奏效。此外,我的UIGestureRecognizercancelsTouchesInView配置设置为NO,因此不会干扰触摸。

帮助表示赞赏。谢谢!

回答

3

我在我的touchesBegan方法中有一条线,它将手势识别器的state属性设置为UIGestureRecognizerStateBegan。删除这条线似乎解决了这个问题。

9

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

24

退房的UIGestureRecognizerDelegate方法:- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

如果返回是的,它会阻止你的手势识别从跺脚上UIScrollView的使用来检测滚动的一个。

+0

这个固定事情我,当我有同样的问题,谢谢 – 2010-11-01 15:24:42

+0

我一直在打我的脑袋上就这一个墙。谢谢 ! :D – Legolas 2012-08-31 17:38:35

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; 
} 
+0

这是正确的答案,如果手势是垂直的,则防止panGesture开始。 – Vassily 2014-04-11 15:26:55