如何在UITableViewCell的imageView上获取触摸事件?

3

我希望在用户单击或双击UITableViewCell的imageView时收到通知。我已经尝试向imageView添加子视图,并在子视图控制器中使用touchesBegan:withEvent:,但无法触发我期望的事件。我该如何完成这项工作?


ImageView无法通过任何函数拥有其触摸事件。 但是,您可以尝试将UIButton放置在ImageView的位置,并设置该按钮的背景图像,以便同时获得图像和按钮触摸事件。这可能会达到您的目的。 - Jay Vachhani
请看这个答案:http://stackoverflow.com/questions/1606492/touch-event-is-not-working-in-uimageview/1606616#1606616 - Jean Regisser
3个回答

3

另外一种解决方案:

给UIImageView添加一个类别来处理触摸事件。然后为每个触摸事件发送通知,并在视图控制器(或单元格控制器)中订阅通知。

如果你感到有趣,还可以将方法调用转发到视图控制器。

然后启用单元格的imageView的触摸事件:

[self setUserInteractionEnabled:YES];

现在所有的触摸操作都将被发送到您希望处理它们的位置,无需子类化。而且它是可重用的。

我尝试了几种不同的解决方案,但这个解决方案对我来说是最简单和最清晰的。我可以利用现有的UITableViewCell样式来布局单元格(即,我不必添加子视图到单元格并对它们进行布局),也不需要子类化任何东西。效果很好...谢谢! - yabada

1
在我的项目中,我已经对UIImageView进行了子类化以添加用户交互。如果有用的话,您可以简单地查看苹果示例代码,项目名称为“TapToZoom”。 简而言之,您需要启用用户交互,只有在此之后UIImageView才会开始响应触摸事件。 这是通过设置userInteractionEnabled属性来完成的:
[self setUserInteractionEnabled:YES];

然后,您可以通过以下方式自定义其他触摸属性:

[self setMultipleTouchEnabled:YES];
twoFingerTapIsPossible = YES;

否则,您可以实现一种类似于照片应用程序的缩略图视图。根据您的目标,您也可以考虑使用UIButton,您可以设置背景图片。我有一个项目,仅通过在每个tableView行中以编程方式放置四个UIButtons来模拟原始照片应用程序的照片缩略图视图,它运行良好。 干杯

子类化UIImageView有什么帮助?你无法设置UITableViewCell使用的imageView。 - user102008

1

感谢以上的回答,问题已经解决了。

我的解决方案:
在实现文件中创建一个UIView的子类,重写touchesBegan:withEvent:方法
将UIView作为cell.view的子视图添加到imageView上方,并覆盖imageView的位置,然后让该子视图最接近透明(alpha=0.015f)
完成。
它运行良好。

注意:如果alpha值太小(0.01f),将不会触发触摸事件,有人知道为什么吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接