Swift-多个UILabel click事件到同一个函数
我需要向多个Swift-多个UILabel click事件到同一个函数,swift,uilabel,uitapgesturerecognizer,Swift,Uilabel,Uitapgesturerecognizer,我需要向多个UILabel添加一个uitagesturerecognizer,它们都需要转到同一个函数进行处理 我所拥有的是: @IBOutlet weak var label_something: UILabel! let tap = UITapGestureRecognizer(target: self, action: #selector(self.myFunction)) label_something.addGestureRecognizer(tap) 在此收到: @objc fun
UILabel
添加一个uitagesturerecognizer
,它们都需要转到同一个函数进行处理
我所拥有的是:
@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起作用(如果将AddGestureRecognitizer(点击)
添加到多个UILabel
中,它只对最后添加的一个UILabel起作用)
所以我的问题是:
如何实现我在这里想要做的事情?五个不同的UILabels和TapRecognitizer将使用相同的功能例如,如果您从UIApgestureRecognitizer添加新实例,它将正常工作
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)
例如,如果您从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())
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都需要自己的识别器,对于这种情况,我有一个小助手函数。请随意复制/粘贴
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)
}
}
每个UIView都需要自己的识别器,对于这种情况,我有一个小助手函数。请随意复制/粘贴
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)
}
}
如何确定仅为一个标签调用的
myFunction(发送方:)
?如果你点击另一个标签,它不会打电话。你查过日志了吗?是的,函数中的一个简单打印(“hepp”)只有在点击一个有效的时才会显示。你能在这里看到更多的代码吗?ie您如何分配标签\u某物
?为什么使用标签而不是按钮?@Sourcey86您在哪里为所有其他标签添加了手势?您如何确定仅为一个标签调用的myFunction(发送者:)
?如果你点击另一个标签,它不会打电话。你查过日志了吗?是的,函数中的一个简单打印(“hepp”)只有在点击一个有效的时才会显示。你能在这里看到更多的代码吗?ie如何分配标签\u something
?为什么使用标签而不是按钮?@Sourcey86您在哪里为所有其他标签添加了手势?是否确实需要为每个标签创建新手势?@Mani手势识别器只能附加到一个视图。原因是每个识别器都可以有自己的手势状态(一个被触发,其他的未被触动)。我认为是的,因为如果使用同一个实例,它将被添加到最后一个标签中。@Crazyrems你明白你的意思了。看了之后@玛尼:是的。每个标签都需要一个点击手势识别器,即一个UITapGestureRecognizer
只能分配给单个组件,这就是为什么最后一个标签会识别tap
,它会自动从以前的标签中删除。但是,所有手势都可以使用相同的选择器方法。是否确实需要为每个标签创建新手势?@Mani手势识别器只能附加到一个视图。原因是每个识别器都可以有自己的手势状态(一个被触发,其他的未被触动)。我认为是的,因为如果使用同一个实例,它将被添加到最后一个标签中。@Crazyrems你明白你的意思了。看了之后@玛尼:是的。每个标签都需要一个点击手势识别器,即一个UITapGestureRecognizer
只能分配给单个组件,这就是为什么最后一个标签会识别tap
,它会自动从以前的标签中删除。但是,所有手势都可以使用相同的选择器方法。