如何在同一视图中的不同控件上听轻击手势?

时间:2017-01-30 02:12:53

标签: ios swift uitapgesturerecognizer

我有两个控件副本(称为RatingControl)。当有人双击它们时,如何编写可以在正确的对象上调用的处理程序?

我有:

@IBOutlet weak var ratingControl: RatingControl!
@IBOutlet weak var ratingControl2: RatingControl!

TableViewController内,然后

override func viewDidLoad() {
    super.viewDidLoad()

    let tapGR = UITapGestureRecognizer(target: ratingControl, action: #selector(RatingControl.doubleTap(_:)))
    tapGR.numberOfTapsRequired = 2
    self.view.addGestureRecognizer(tapGR)

    let tapGR2 = UITapGestureRecognizer(target: ratingControl2, action: #selector(RatingControl.doubleTap(_:)))
    tapGR2.numberOfTapsRequired = 2
    self.view.addGestureRecognizer(tapGR2)

}

RatingControl.doubleTap(_)是一个无害的事件处理程序。

当第二个评级控件上有双击时,会调用doubleTap方法,但会在第一个评级控件对象上调度该方法!

我尝试在一个UITapGestureRecognizer上设置两个目标,但它会遇到同样的问题。

非常感谢!

2 个答案:

答案 0 :(得分:1)

连接手势识别器有两个部分:目标,它确定在识别器被触发时通知哪个对象,以及它附加的视图,它确定识别器从哪个视图识别手势

你有两个手势识别配置方式相同,都附加到self.view。因此,他们会对self.view(我认为是视图控制器的内容视图)上的点击做出响应。我不清楚它是否清楚哪个手势识别器将被触发时在那种情况下,你点击。

您应该有2个不同的视图,并为每个视图附加不同的手势识别器。如果ratingControl1ratingControl2是视图对象,或许您打算将手势识别器直接附加到它们,而不是self.view

答案 1 :(得分:1)

您需要将手势识别器添加到两个评级控件而不是self.view

试试这个:

let tapGR = UITapGestureRecognizer(target: self, action: #selector(RatingControl.doubleTap(_:)))
tapGR.numberOfTapsRequired = 2
ratingControl.addGestureRecognizer(tapGR) // ratingControl, not self.view
let tapGR2 = UITapGestureRecognizer(target: self, action: #selector(RatingControl.doubleTap(_:))) 
tapGR2.numberOfTapsRequired = 2
ratingControl2.addGestureRecognizer(tapGR2) // ratingControl2, not self.view