【问题标题】:How do I listen to tap gestures on different controls in the same view?如何在同一视图中收听不同控件上的点击手势?
【发布时间】:2017-01-30 02:12:53
【问题描述】:

我有两个控件副本(称为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 上设置两个目标,但遇到了同样的问题。

非常感谢!

【问题讨论】:

  • 怎么样:let tapGR = UITapGestureRecognizer(target: self, action: #selector(RatingControl.doubleTap(_:))) tapGR.numberOfTapsRequired = 2 ratingControl.addGestureRecognizer(tapGR) let tapGR2 = UITapGestureRecognizer(target: self, action: #selector(RatingControl.doubleTap(_:))) tapGR2.numberOfTapsRequired = 2 ratingControl2.addGestureRecognizer(tapGR2)
  • 叹息。非常感谢。这就像一个魅力。
  • @nynohu 与其在评论中发布一堆不可读的代码,不如发布一个答案?
  • @rmaddy 好的,我知道了,作为答案发布。
  • 如果我们已经回答了您的问题,您应该接受其中一个答案。选择您认为最好的答案,或者在答案质量相同的情况下第一个回答您的问题。

标签: ios swift uitapgesturerecognizer


【解决方案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

【讨论】:

  • 是的,我说过。我认为最好解释要更改的内容和原因,而不是简单地提供插入式代码更改而不做任何解释。
【解决方案2】:

连接手势识别器有 2 个部分:目标(确定触发识别器时通知哪个对象的目标)和它所附加到的视图(确定识别器从哪个视图识别手势)。

您有 2 个以相同方式配置的手势识别,都附加到 self.view。因此,它们将响应 self.view 上的点击(我假设它是视图控制器的内容视图。)我认为在这种情况下点击时将触发哪个手势识别器并不明确。

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

【讨论】:

  • 感谢您的澄清。真的很感激。该文档对目标和附件的作用感到困惑。您的回复澄清了。
  • 如果我们已经解决了您的问题,那么您应该接受您认为最能解决您的问题的答案。
猜你喜欢
  • 2012-07-30
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
相关资源
最近更新 更多