在长按手势识别器上获取错误的UIButton标签

我知道已经有很多问题与此类似,但我已经尝试了所有这些问题,并且由于未能解决我的问题,我发布了我的问题。 首先我尝试的问题是:

1) 如何通过longPressGestureRecognizer获取button.tag?

2) UIButton长按事件

在我的应用程序中,我的xib中有12个UIButtons 。 在UIButton的长按上,我有这个方法被调用。 每次单击不同的UIButtons时,使用gesture.view.tag属性总是给我相同的标记(即)。

 - (IBAction)longPress:(id)sender { UILongPressGestureRecognizer* gesture=(UILongPressGestureRecognizer*)sender; NSLog(@"Tag---> %d",gesture.view.tag); } 

我的xib看起来像这样:

在此处输入图像描述

更新1:

在有人对xib感到困惑之前,我必须说UIButtons设置为Custom类型,因此它们在UIImageView下是不可见的。

UIGestureRecognizer似乎可以跟踪多个视图,但它不会报告它正在跟踪多个视图。 因此,当您检查UIGestureRecognizerview属性时,它将设置为添加识别器的最后一个视图。

来自文档 :

手势识别器根据对特定视图和所有视图的子视图进行经过测试的触摸进行操作。 因此必须与该观点相关联。 要建立该关联,您必须调用UIView方法addGestureRecognizer:。 手势识别器不参与视图的响应者链。

此场景中的解决方案是为每个需要识别的视图设置一个手势识别器,并将它们链接到同一个委托选择器。

注意:这个问题(和我的回答)起源于2013年3月20日的NSChat聊天室。决定在此发布以供将来参考。