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

时间:2013-03-20 13:17:25

标签: iphone ios objective-c uibutton uigesturerecognizer

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

1)How to get button.tag via longPressGestureRecognizer?

2)UIButton Long Press Event

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

- (IBAction)longPress:(id)sender {

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

我的xib看起来像这样:

enter image description here

  

更新1:

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

1 个答案:

答案 0 :(得分:7)

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

来自docs

  

手势识别器针对 特定视图 以及所有该视图的子视图进行了热门测试。因此必须与该观点相关联。要建立该关联,您必须调用UIView方法addGestureRecognizer:。手势识别器不参与视图的响应者链。

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

注意:这个问题(和我的回答)起源于NSChat chat room, on March 20th, 2013.决定在此发布以供将来参考。