Сбой статического метода UITapGestureRecognizer - PullRequest
0 голосов
/ 05 июля 2018

У меня есть быстрое приложение с несколькими пользовательскими UICollectionViewCell с. Во всех ячейках есть несколько объектов (UIImageView или UILabel), на которые пользователь может нажать (следовательно, я использую несколько UITapGestureRecognizer s для вызова соответствующего действия. Теперь, чтобы облегчить свою работу и сделать код менее повторяюсь, я хотел создать extension из UITapGestureRecognizer с static методом, который я могу вызвать непосредственно в классе.

Я так и сделал, но тот факт, что приложение вылетает, означает, что у меня что-то не получалось. Вот мой код:

extension UITapGestureRecognizer {
    static func addNewTapGuestureRecognizer(for imageView: UIImageView, selectorName: Selector) {
        let tap = UITapGestureRecognizer(target: self, action: selectorName)
        imageView.addGestureRecognizer(tap)
        imageView.isUserInteractionEnabled = true
    }

    static func addNewTapGuestureRecognizer(for label: UILabel, selectorName: Selector) {
        let tap = UITapGestureRecognizer(target: self, action: selectorName)
        label.addGestureRecognizer(tap)
        label.isUserInteractionEnabled = true
    }
}

class TextCVC: UICollectionViewCell {

    override func awakeFromNib() {
        super.awakeFromNib()
        addTapGuesturesForImagesAndLabels()
    }

    func addTapGuesturesForImagesAndLabels() {
        UITapGestureRecognizer.addNewTapGuestureRecognizer(for: postActionShareImageVIew, selectorName: #selector(self.shareImageTapped))
        UITapGestureRecognizer.addNewTapGuestureRecognizer(for: postActionLikeImageVIew, selectorName: #selector(self.likeImageTapped))
    }

    @objc func shareImageTapped() {
        print("share")
    }

    @objc func likeImageTapped() {
    }
}

Ошибка консоли говорит:

Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '+ [UITapGestureRecognizer likeImageTapped]: нераспознанный селектор отправлен в класс 0x1b52e4c50 '

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Проблема в цели, поэтому замените это

 static func addNewTapGuestureRecognizer(for imageView: UIImageView, selectorName: Selector) {

с

static func addNewTapGuestureRecognizer(for imageView: UIImageView, selectorName: Selector , myTarget:UICollectionViewCell) {

     let tap = UITapGestureRecognizer(target: myTarget, action: selectorName)


 }
0 голосов
/ 05 июля 2018

Кажется, проблема здесь: let tap = UITapGestureRecognizer(target: self, action: selectorName)

Цель не self, это экземпляр UICollectionViewCell.

Измените свой код на:

static func addNewTapGuestureRecognizer(for imageView: UIImageView, target: Any, selectorName: Selector) {
    let tap = UITapGestureRecognizer(target: target, action: selectorName)
    imageView.addGestureRecognizer(tap)
    imageView.isUserInteractionEnabled = true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...