表格视图单元格中的 UIGestureRecognizer 获取 indexPath 始终返回最后一个单元格的 indexPath

Posted

技术标签:

【中文标题】表格视图单元格中的 UIGestureRecognizer 获取 indexPath 始终返回最后一个单元格的 indexPath【英文标题】:UIGestureRecognizer in table view cell get indexPath always return the indexPath of the last cell 【发布时间】:2014-02-16 05:08:25 【问题描述】:

我在 UITaleViewCell 中有一个 UIImageView,我在 UIImageView 中添加了一个点击识别器。

- (IBAction)ui_tapped:(UITapGestureRecognizer *)sender 
    NSIndexPath *indexPath = [CocoaHelper indexPathWithTableView:self.tableView sender:sender.view];

    RichMediaViewController *viewController = (RichMediaViewController *)[CocoaHelper viewControllerWithIdentifier:VC_RICH_MEDIA];
    Message *message = self.messages[indexPath.row];
    [viewController setupWithEntity:message];
    [self presentViewController:viewController animated:YES completion:nil];




+ (NSIndexPath *)indexPathWithTableView:(UITableView *)tableView sender:(id)sender 

    CGPoint hitPoint = [sender convertPoint:CGPointZero toView:tableView];
    NSIndexPath *hitIndex = [tableView indexPathForRowAtPoint:hitPoint];
    return hitIndex;


我用 + (NSIndexPath *)indexPathWithTableView:(UITableView *)tableView 发件人:(id)sender 对于单元格内的按钮,它是正确的,但对于手势,它总是返回最后一个索引路径的单元格。

编辑

对点击识别器进行硬编码

if ([message.type isEqualToString:@"image"]) 
    UIImageView *view = ((ImageMessageCell *)cell).imageView;
    UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(ui_tapped:)];
    [view setGestureRecognizers:[NSArray arrayWithObject:tapRec]];

这是非常繁琐的编码(因为我需要检查每种类型的单元格,包括图像、视频和其他富媒体),如果您知道如何从情节提要中添加,请发布您的答案

【问题讨论】:

【参考方案1】:

事实证明,它无法将手势识别器分别添加到每个实例化的原型单元格,即从同一原型单元格实例化的所有单元格只有一个手势识别器。

通过使用带有背景图像视图的 UIButton 而不是使用图像视图解决了这个问题。

[self.imageButton setBackgroundImage:[UIImage imageNamed:LOADING_IMAGE_FILE] forState:UIControlStateNormal];
NSData *blob = post.thumbnailBlob;
if (blob) 
    [self.imageButton setBackgroundImage:[UIImage imageWithData:blob] forState:UIControlStateNormal];

【讨论】:

以上是关于表格视图单元格中的 UIGestureRecognizer 获取 indexPath 始终返回最后一个单元格的 indexPath的主要内容,如果未能解决你的问题,请参考以下文章

表格视图单元格中的图像

Obj-C - 点击自定义表格视图单元格中的删除表格视图行按钮

将表格视图快速添加到表格视图单元格中的问题

自定义表格单元格中的堆栈视图

自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图

检查表格视图单元格中的部分索引标题