Swift - Несколько событий UILabel для одной и той же функции - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно добавить 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 он работает только с последним добавленным)

Итак, мой вопрос:

Как добиться того, что я хочу сделать здесь? Пять различных UILabels с tapRecognizer, идущими на одну и ту же функцию

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

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())
0 голосов
/ 25 апреля 2018

Каждый 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)
        }
     }
0 голосов
/ 25 апреля 2018

Если вы добавите новый экземпляр из 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)
...