UIGestureRecognizer阻止tableview滚动

Bre*_*toe 4 objective-c uitableview uigesturerecognizer ios

我有一张带静电池的桌子.其中一个单元格中有一个视图,上面有一个平移手势识别器.

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

我已经看过这个问题(http://stackoverflow.com/questions/3295239/uigesturerecognizer-blocking-table-view-scrolling)但是将cancelsTouchesInView设置为NO不起作用,我没有设置state属性的任何地方使用该方法- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 我不知道从哪里获取'otherGestureRecognizer'或者在哪个对象上调用该方法.

我假设我不想将我的手势识别器作为第一个参数,而tableview的滚动手势识别器作为otherGestureRecogniser,是正确的吗?如果是这样,我该怎么做?

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

[self.windRangeView addGestureRecognizer:windPanGesture];
Run Code Online (Sandbox Code Playgroud)

然后在我的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
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将tableviewcontroller设置为UIGestureRecognizerDelegate,但我不知道如何处理它.

Jef*_*mas 8

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

windPanGesture.delegate = self;
Run Code Online (Sandbox Code Playgroud)

此时,当您执行平移时,系统将-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:使用您的手势识别器作为一个参数调用委托方法,并将滚动视图的手势识别器调用为另一个.


更新

您可能还想实现-gestureRecognizerShouldBegin:方法,如果您不在某个特定区域,则返回NO .