2012-10-10 72 views
3

我有一个静态单元格的表。其中一个单元有一个视图,上面有一个平移手势识别器。UIGestureRecognizer阻止tableview滚动

当我向下滚动我的tableview,当我到达与移动手势识别器视图中的单元格,滚动似乎并没有工作。如果我触摸视图外侧(侧面或顶部或底部),它可以工作,我可以滚动。我在我的gesturerecognizer中有一个if语句,用于测试是否触摸了某个区域,如果是,则执行一个动作。

我已经看过这个问题(http://stackoverflow.com/questions/3295239/uigesturerecognizer-blocking-table-view-滚动),但设置cancelsTouchesInView到NO没有工作,我没有任何设置状态属性和使用方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 我不知道从哪里获取'otherGestureRecognizer'或者调用该方法的对象。

我假设我wan't把我的手势识别器作为第一个参数,以及tableview中的滚动手势识别器作为otherGestureRecogniser,是正确的?如果是这样,我该如何得到它?

UIPanGestureRecognizer *windPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveWindHandle:)]; 

[self.windRangeView addGestureRecognizer:windPanGesture]; 

然后在我的moveWindHandle:

-(void)moveWindHandle:(UIPanGestureRecognizer *)gesture 
{ 
    gesture.cancelsTouchesInView = NO; 
    isMovingHandle = [self isPoint:startedTouchAt insideHandle:_toHandleWindImageView]; 
    if(isMovingHandle) { 

     if(gesture.state == UIGestureRecognizerStateBegan) { 
      //do stuff 
     } 
    } 
    else 
    { 
     //i want it to ignore this gesture and just scroll like normal if that is what hte user did 
    } 
} 

我已经设置了tableviewcontroller为UIGestureRecognizerDelegate,但我不知道如何处理这一点。

回答

7

你不会是一个叫-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:。该方法由系统调用。您需要将您的表格视图控制器设置为窗口平移手势的代表。

windPanGesture.delegate = self; 

在这一点上,当你做的锅,系统会调用委托方法-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:与手势识别为一个参数,滚动视图的手势识别为其他。


更新

您可能还需要实现-gestureRecognizerShouldBegin:方法并返回NO,如果你是不是在某些领域之一。

+0

我已经设置了'windPanGesture.delegate = self'但是这并没有完全解决这个问题。如果我从windRangeView外部启动滚动,然后从windRangeView内部继续它,它的工作原理。但是,如果tableview是静止的,并且我尝试从windRangeView中启动一个滚动,它不会执行滚动。 – Brentoe

+0

完美,谢谢! -gestureRecognizerShouldBegin:在修复它后添加。 – Brentoe