2009-11-23 64 views
3

我想在用户单击或双击UITableViewCell的imageView时收到通知。我一直试图添加一个子视图到imageView,并使用touchesBegan:withEvent:在子视图控制器中,但不能触发我期望的事件。我该怎么做?如何获取UITableViewCell的imageView触摸事件?

+0

imageview通过任何函数都无法触摸事件。 但是,您可以尝试放置UIButton而不是imageview并设置该按钮的背景图像,以便您可以同时获得图像和按钮触摸事件。这可能符合你的目的。 – 2009-11-23 08:37:50

+0

看看这个答案:http://stackoverflow.com/questions/1606492/touch-event-is-not-working-in-uimageview/1606616#1606616 – 2009-11-23 08:45:23

回答

1

在我的项目中,我添加了用户交互的子类UIImageView,如果它可以是有用的,你可以简单地看看苹果示例代码项目“TapToZoom”。 简而言之,您必须启用用户交互,并且只有在此之后,UIImageView才会开始回应触摸。 这是通过设置userInteractionEnabled属性来完成:

[self setUserInteractionEnabled:YES]; 

那么你可以通过自定义其他触摸的特性,例如:

[self setMultipleTouchEnabled:YES]; 
twoFingerTapIsPossible = YES; 

否则,你可能会实现一种缩略图查看喜欢的照片应用程序,让我们说。根据您的目标,您还可以考虑使用UIButton,您可以在其中设置背景图像。我有一个项目,我模仿原始照片应用程序的照片缩略图视图,只需在每个tableView行中以编程方式放置四个UIButton,并且工作正常。 干杯

+0

子类化UIImageView如何帮助?你不能设置UITableViewCell使用的imageview – user102008 2012-03-21 01:40:32

1

感谢上面的答案,工作已经完成。

 
My solution: 
    subclass a UIView, override touchesBegan:withEvent: in it's implementation file 
    add the UIView(as subview) to cell.view and cover the position of imageView, then make the subview nearest transparent(alpha=0.015f) 
    done. 
    it works fine 

注意:如果字母数量太少(0.01F),也不会触发触摸事件,任何人都知道这是为什么?

3

还有一个解决办法:

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

如果您感觉活泼,也可以将方法调用转发给视图控制器。

然后启用触摸事件的小区的ImageView的:

[self setUserInteractionEnabled:YES]; 

现在,所有触摸将发送要处理它们,没有子。它可以重复使用。

+0

我尝试了几个/几个不同的解决方案,但这个解决方案工作,并且是最简单和最干净的方式来做到这一点。我可以利用现有的UITableViewCell样式来布局单元格(即,我不必为单元格添加子视图并将它们放在外面),或者子类化任何东西。非常好,谢谢! – yabada 2010-08-13 17:14:33