在滑动手势UITableView上获取单元索引路径

时间:2011-08-22 08:02:52

标签: iphone objective-c ios uitableview swipe-gesture

我正在UITableView上做滑动手势,想知道我的手指当前进入的单元格的索引路径,即从哪个单元格执行滑动手势。

我需要indexPath,因为我必须显示所选单元格的信息..

提前致谢..

3 个答案:

答案 0 :(得分:53)

那么你真正需要的是从桌面上轻扫手势获取单元格?对。你不需要知道indexPath。首先在tableView上定义滑动,如此 -

UISwipeGestureRecognizer *showExtrasSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipe:)];
showExtrasSwipe.direction = UISwipeGestureRecognizerDirectionRight;
[tableView addGestureRecognizer:showExtrasSwipe];
[showExtrasSwipe release];

在此之后实际滑动发生时,您需要将处理程序放入其中。为此尝试这个 -

-(void)cellSwipe:(UISwipeGestureRecognizer *)gesture
{
    CGPoint location = [gesture locationInView:tableView];
    NSIndexPath *swipedIndexPath = [tableView indexPathForRowAtPoint:location];
    UITableViewCell *swipedCell  = [tableView cellForRowAtIndexPath:swipedIndexPath];

    //Your own code...
}

所以我们所做的就是先将SwipeGestureRecognizer附加到UITableView(而不是UITableViewCell)。之后,当UITableView上的滑动发生时,我首先得到UITableView中手势发生位置的坐标。接下来,使用此坐标,我得到IndexPath中发生滑动的行的UITableView。最后使用IndexPath我得到UITableViewCell。真的很简单..

注意:我被问过这么多次。因此,在SwipeGestureRecognizer上添加UITableView的原因,而不是每个UITableViewCell上的SwipeGestureRecognizer

我可以将UITableViewCell附加到每个SwipeGestureRecognizer。我没有这样做,因为我不得不为每个单元格附加一个单独的UITableView。所以如果我的SwipeGestureRecognizer中有1000个单元格,我将不得不创建1000个SwipeGestureRecognizer个对象。这个不好。在我的上述方法中,我只需创建一个{{1}}就可以了。

答案 1 :(得分:0)

如果您尝试实施“滑动删除”(在水平方向滑动),则无需重新发明轮子。只需取消注释commitEditingStyle:forRowAtIndexPath:代理中的方法UITableViewController即可。

答案 2 :(得分:-1)

您检查过此源代码吗? : https://github.com/thermogl/TISwipeableTableView

这真的可以帮助你,这是一个“可刷卡”的桌面视图的完整实现......