UIGestureRecognizer如何阻止tableview的滚动

4
我有一个带静态单元格的表格。其中一个单元格内含有一个视图,上面有一个平移手势识别器。
当我滚动表格时,当到达带有平移手势识别器的视图的单元格时,滚动似乎不起作用。如果我触摸视图外面(侧面或顶部或底部),它就可以正常滚动。在我的手势识别器中,我有一个if语句,测试是否触摸了某个区域,如果是,则执行一个操作。
我查看了这个问题(https://dev59.com/MU_Sa4cB1Zd3GeqP-Tax - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 我不知道从哪里获取“ otherGestureRecognizer”,或者调用该方法的对象是什么。
我假设我想将我的手势识别器作为第一个参数,将表格视图的滚动手势识别器作为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,但是我不知道该怎么做。

1个回答

8

您不需要调用-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:方法,该方法是由系统调用的。您需要将表视图控制器设置为窗口平移手势的委托。

windPanGesture.delegate = self;

这时,当您进行全屏滑动时,系统将调用委托方法 -gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:,并将您的手势识别器作为一个参数,滚动视图的手势识别器作为另一个参数。


更新

如果您不在某些特定区域中,您可能还想要实现 -gestureRecognizerShouldBegin: 方法,并返回 NO。


我已经设置了 windPanGesture.delegate = self,但这并没有完全解决问题。如果我从 windRangeView 外部开始滚动,然后从 windRangeView 内部继续滚动,它可以正常工作。但是,如果 tableview 是静止的,并且我尝试从 windRangeView 内部开始滚动,则无法滚动。 - Brentoe
太好了,谢谢!在其中添加-gestureRecognizerShouldBegin:解决了它。 - Brentoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接