我有两个控件副本(称为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
上设置两个目标,但它会遇到同样的问题。
非常感谢!
答案 0 :(得分:1)
连接手势识别器有两个部分:目标,它确定在识别器被触发时通知哪个对象,以及它附加的视图,它确定识别器从哪个视图识别手势
你有两个手势识别配置方式相同,都附加到self.view
。因此,他们会对self.view(我认为是视图控制器的内容视图)上的点击做出响应。我不清楚它是否清楚哪个手势识别器将被触发时在那种情况下,你点击。
您应该有2个不同的视图,并为每个视图附加不同的手势识别器。如果ratingControl1
和ratingControl2
是视图对象,或许您打算将手势识别器直接附加到它们,而不是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