4

我有一张带有静态单元格的表格。其中一个单元格中有一个视图,上面有一个平移手势识别器。

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

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

我假设我不想把我的手势识别器作为第一个参数,而 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,但我不知道该怎么做。

4

1 回答 1

8

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

windPanGesture.delegate = self;

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


更新

您可能还想实现 -gestureRecognizerShouldBegin: 方法,如果您不在某些区域之一,则返回 NO 。

于 2012-10-10T12:01:33.203 回答