将 UITapGestureRecognizer 添加到 UIControl

Posted

技术标签:

【中文标题】将 UITapGestureRecognizer 添加到 UIControl【英文标题】:Adding UITapGestureRecognizer to the UIControl 【发布时间】:2017-04-25 22:37:25 【问题描述】:

我有一个以编程方式创建的滑块类 (class Slider: UIControl),我想添加一个双击手势以将其调整为默认设置。不幸的是,我无法像以前在 SpriteKit 中那样实现 UITapGestureRecognizer。

部分代码:

class Slider: UIControl
   ...
   let doubleTap : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
   ...

   init()
      ...
      doubleTap.numberOfTapsRequired = 1
      addGestureRecognizer(doubleTap)
   

   func doubleTapped()
      print("double tapped")
   

现在我只想实现手势识别器,然后添加我需要做的事情。我还实现了 touchesMoved 和 touchesBegan。

【问题讨论】:

首先let中的初始化选择器不起作用,此时对象还没有完全初始化,将其移到init中。然后尝试使用delegate来判断未调用selector的原因,可能是某些系统手势识别器取了你的事件。 为什么initdoubleTapped方法在类之外而不是类的一部分? @rmaddy 这是一个错误,init 和 doubleTapped 在类内 那么请编辑您的问题以显示正确的代码。 @vojer 如何在这里使用委托? doubleTap.delegate = self 返回错误:无法将类型 'Slider' 的值分配给类型 'UIGestureRecognizerDelegate' 【参考方案1】:

好的,答案很简单,不需要委托。

class Slider: UIControl
   ...

   init()
      ...
      let doubleTap : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(doubleTapped))
      doubleTap.numberOfTapsRequired = 1
      addGestureRecognizer(doubleTap)
   

   func doubleTapped()
      print("double tapped")
   

【讨论】:

以上是关于将 UITapGestureRecognizer 添加到 UIControl的主要内容,如果未能解决你的问题,请参考以下文章

将 NSDictionary 作为参数传递给 UITapGestureRecognizer

将 UITapGestureRecognizer 添加到 UIControl

将 UITapGestureRecognizer 连接到 UIView

将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell

将 UITapGestureRecognizer 添加到 XIB

将 UITapGestureRecognizer 添加到 UILabel 的特定部分的最佳方法是啥?