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
,它会自动从以前的标签中删除。但是,所有手势都可以使用相同的选择器方法。