表格视图单元格中的 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 - 点击自定义表格视图单元格中的删除表格视图行按钮