如何在同一视图中收听不同控件上的点击手势?
How do I listen to tap gestures on different controls in the same view?
我有一个控件的两个副本(称为 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 个以相同方式配置的手势识别,都附加到 self.view
。因此,他们将响应 self.view 上的点击(我假设是视图控制器的内容视图。)我认为在这种情况下点击时将触发哪个手势识别器是不清楚的。
您应该有 2 个不同的视图,并为每个视图附加一个不同的手势识别器。如果 ratingControl1
和 ratingControl2
是视图对象,也许您打算将手势识别器直接附加到它们,而不是 self.view
?
您需要将手势识别器添加到两个评级控件而不是 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
我有一个控件的两个副本(称为 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 个以相同方式配置的手势识别,都附加到 self.view
。因此,他们将响应 self.view 上的点击(我假设是视图控制器的内容视图。)我认为在这种情况下点击时将触发哪个手势识别器是不清楚的。
您应该有 2 个不同的视图,并为每个视图附加一个不同的手势识别器。如果 ratingControl1
和 ratingControl2
是视图对象,也许您打算将手势识别器直接附加到它们,而不是 self.view
?
您需要将手势识别器添加到两个评级控件而不是 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