20

我已经进行了子类化UITableViewCell,并在该类中应用了平移手势识别器:

UIPanGestureRecognizer *panning = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanning:)];
panning.minimumNumberOfTouches = 1;
panning.maximumNumberOfTouches = 1;
[self.contentView addGestureRecognizer:panning];
[panning release];

然后我实现了委托协议,该协议应该允许在表格视图中同时使用手势:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

然后我在方法中放置一个日志,handlePanning以查看何时检测到它:

- (void)handlePanning:(UIPanGestureRecognizer *)sender {
    NSLog(@"PAN");
}

我的问题是我无法垂直滚动表格视图中的单元格列表,handlePanning无论我平移哪个方向,都会调用它。

我想要的是handlePanning只在只有水平平移而不是垂直时才被调用。希望得到一些指导。

4

4 回答 4

17

您是否尝试过设置pannings委托属性?

panning.delegate = /* class name with the delegate method in it */;

您还需要使该类符合 UIGestureRecognizerDelegate。

于 2012-04-17T00:45:05.590 回答
3

子类化平移手势识别器并使其仅识别水平平移。有一个很棒的 WWDC 2010 视频,介绍了自定义手势识别器的问题。实际上有两个关于这个主题,请在https://developer.apple.com/videos/archive/上查看它们:

  • 使用手势识别器简化触摸事件处理
  • 高级手势识别
于 2012-04-17T00:46:21.160 回答
2

在 tableview 上添加手势识别器。从中,您可以获得单元格对象。从那里您可以处理单元格功能。对于每个手势,都会有一个开始、更改和结束状态。因此,存储开始位置。

    CGPoint beginLocation = [gesture locationInView:tblView]; // touch begin state.

    CGPoint endLocation = [gesture locationInView:tblView]; // touch end state.

利用这一点,可以得到IndexPath

    NSIndexPath *indexPath = [tblView indexPathForRowAtPoint:beginPoint];

从此索引路径中,您可以访问单元格。

            UITableViewCell *cell = [tableview cellForRowAtIndexPath : indexPath];

使用此 Cell 对象,您可以处理它。

于 2013-03-20T07:45:03.397 回答
-1

您是否尝试将反弹属性设置为 NO?

于 2015-01-06T06:23:31.213 回答