【问题标题】:IBAction UIButton firing is delayedIBAction UIButton 触发延迟
【发布时间】:2012-05-10 09:03:32
【问题描述】:

我有一个 UIButton 连接到 Interface Builder 中的 IBAction。

问题:

  • 动作触发和按钮取消突出显示都需要一点时间。

事实:

  • 查看结构:
    • 查看
      • 10 个按钮(通过 UIControlEventTouchUpInside 连接到 IBAction
      • 视图(子视图)
        • 手势识别器
        • 文本字段
  • Subview 有一个 UITapGestureRecognizer,其中 delaysTouchesBegan 和 delaysTouchesEnded 都设置为 NO
  • 动作发生在主线程中。
  • 测试一个简单的按钮(没有图片或标题,只有一个简单的 NSLog),结果是一样的

问题: 为什么触发和取消突出显示延迟?

【问题讨论】:

  • 你用来触发按钮的事件是什么?
  • 这个类有很多方法。但我认为代码并不重要,一旦一个带有简单 NSLog 的简单按钮也有同样的问题......
  • 你到底是什么意思,Malek?
  • 你用来检测触摸的事件是什么,UIControlEventTouchUpInside .. UIControlEventTouchDown .. 等等?!
  • UIControlEventTouchUpInside 编辑问题

标签: ios sdk uibutton ibaction


【解决方案1】:

最后,我在某处添加了一些 UIGestureRecognizer,忘记将 delaysTouchesBegan 设置为 NO =(

【讨论】:

  • 您的回答和问题对我帮助很大。就我而言,在包含按钮的视图上添加双击手势会延迟按钮反应(操作系统正在等待确保按钮点击不会变成双击)
  • 谢谢。我能够找到多个手势识别器导致相当大的延迟按钮的 touchupinside。
【解决方案2】:

好的,我认为由于UITapGestureRecognizer .. 尝试执行以下操作:

  1. IBOutlet 连接到您的按钮。

2. 将 UITapGestureRecognizer 委托分配给您的 ViewController。

3.在yourViewController中实现这个手势委托方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
       shouldReceiveTouch:(UITouch *)touch {
    return (! [yourButton pointInside:[touch locationInView:yourButton] withEvent:nil]);
}

这将使点击被您的按钮而不是识别器识别。

【讨论】:

  • 再次编辑问题,@malek,请检查视图结构。当按钮被按下时,这个方法永远不会被调用,只有在另一个子视图被按下时才会被调用。
  • 好吧,这很奇怪,我不知道为什么以及如何。 但是清理了所有的构建文件夹和项目,解决了。
  • 谢谢!这可能对@NatanR 没有帮助,但这正是我所需要的。
  • @Malek_Jundi,请注意不是 UITapGestureRecognizer 而是 UIGestureRecognizerDelegate(第 2 点)...
【解决方案3】:

确保您的触摸事件设置为按钮的第一次接触,这将是触摸事件,否则操作将延迟,直到您选择的任何其他事件完成(即内部触摸,外部触摸,等)。

【讨论】:

  • 如果不这样做,那么我必须知道代码的更多细节才能给你一个成功的答案。
  • 好吧,这很奇怪,我不知道为什么以及如何。 但是清理了所有的构建文件夹和项目,解决了。
  • 啊,很高兴你明白了。当一个项目无法正常工作时,我已经习惯了这样做,以至于我忘记了建议。基本上你的模拟器是在缓存代码上运行的。
猜你喜欢
  • 2017-12-16
  • 2011-04-08
  • 2015-07-11
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
相关资源
最近更新 更多