【问题标题】:Getting wrong UIButton tag on Long press gesture recognizer在长按手势识别器上获取错误的 UIButton 标签
【发布时间】:2013-03-09 14:44:51
【问题描述】:

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

1)How to get button.tag via longPressGestureRecognizer?

2)UIButton Long Press Event

在我的应用程序中,我的 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 设置为自定义类型,因此它们在 UIImageView 下是不可见的。

【问题讨论】:

  • 它会崩溃。发件人是UILongPressGestureRecognizer。它没有标签属性。它的观点是UIButton 将具有标签属性。请参考Richard j Ross's 回答。感谢您的努力。
  • 是的,我注意到手势识别器,我相信 RJR 的解决方案是正确的

标签: iphone ios objective-c uibutton uigesturerecognizer


【解决方案1】:

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

来自docs

手势识别器在对特定视图和所有该视图的子视图进行命中测试的触摸上进行操作。因此,它必须与该视图相关联。要建立这种关联,您必须调用 UIView 方法 addGestureRecognizer:。手势识别器不参与视图的响应者链。

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

注意:这个问题(和我的回答)起源于NSChat chat room, on March 20th, 2013.,特此发帖以供日后参考。

【讨论】:

  • 感谢理查德的说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多