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)
        }
     }