Swift - 多个 UILabel 单击事件到同一个函数
Swift - Multiple UILabel click events to same function
我需要添加一个UITapGestureRecognizer
到多个UILabel
,它们都需要去同一个函数处理。
我的是这样的:
@IBOutlet weak var label_something: UILabel!
let tap = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
label_something.addGestureRecognizer(tap)
此处收到:
@objc func myFunction(sender:UITapGestureRecognizer) { // Something... }
像魅力一样工作。问题是它只适用于一个 UILabel(如果将 addGestureRecognizer(tap)
添加到多个 UIlabel
它只适用于最后添加的一个)
所以我的问题是:
如何在这里实现我想做的事情?五个不同的带有 tapRecognizer 的 UILabels 去同一个函数
如果您从 UITapGestureRecognizer 添加新实例,它会正常工作,例如
let tap = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
label_1.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
label_2.addGestureRecognizer(tap)
UIGestureRecognizer
用于单个视图,您必须创建 UIGestureRecognizer
的新实例
func setGesture() -> UITapGestureRecognizer {
var myRecognizer = UITapGestureRecognizer()
myRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
return myRecognizer
}
label_something1.addGestureRecognizer(setGesture())
label_something2.addGestureRecognizer(setGesture())
每个 UIView 都需要自己的识别器,对于这种情况,我有一些辅助功能。随意 copy/paste.
private func addTapRecognizer(toView view: UIView) {
let recognizer = UITapGestureRecognizer(target: self, action: #selector(didTapButton(sender:)))
view.isUserInteractionEnabled = true
view.addGestureRecognizer(recognizer)
}
@objc private func didTapButton(sender: UIGestureRecognizer) {
guard let view = sender.view else {
return
}
switch view {
case self.imageView: // any view you want to check
default:
print(sender.debugDescription)
}
}
我需要添加一个UITapGestureRecognizer
到多个UILabel
,它们都需要去同一个函数处理。
我的是这样的:
@IBOutlet weak var label_something: UILabel!
let tap = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
label_something.addGestureRecognizer(tap)
此处收到:
@objc func myFunction(sender:UITapGestureRecognizer) { // Something... }
像魅力一样工作。问题是它只适用于一个 UILabel(如果将 addGestureRecognizer(tap)
添加到多个 UIlabel
它只适用于最后添加的一个)
所以我的问题是:
如何在这里实现我想做的事情?五个不同的带有 tapRecognizer 的 UILabels 去同一个函数
如果您从 UITapGestureRecognizer 添加新实例,它会正常工作,例如
let tap = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
label_1.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
label_2.addGestureRecognizer(tap)
UIGestureRecognizer
用于单个视图,您必须创建 UIGestureRecognizer
func setGesture() -> UITapGestureRecognizer {
var myRecognizer = UITapGestureRecognizer()
myRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.myFunction))
return myRecognizer
}
label_something1.addGestureRecognizer(setGesture())
label_something2.addGestureRecognizer(setGesture())
每个 UIView 都需要自己的识别器,对于这种情况,我有一些辅助功能。随意 copy/paste.
private func addTapRecognizer(toView view: UIView) {
let recognizer = UITapGestureRecognizer(target: self, action: #selector(didTapButton(sender:)))
view.isUserInteractionEnabled = true
view.addGestureRecognizer(recognizer)
}
@objc private func didTapButton(sender: UIGestureRecognizer) {
guard let view = sender.view else {
return
}
switch view {
case self.imageView: // any view you want to check
default:
print(sender.debugDescription)
}
}