【问题标题】:UITapGestureRecognizer static method crashesUITapGestureRecognizer 静态方法崩溃
【发布时间】:2018-07-05 14:19:08
【问题描述】:

我有一个带有多个自定义UICollectionViewCells 的快速应用程序。所有单元格都有多个用户可以点击的对象(UIImageViewUILabel)(因此,我使用多个UITapGestureRecognizers 来调用相应的操作。现在,为了减轻我的工作并减少代码重复,我想创建一个 UITapGestureRecognizerextensionstatic 方法,我可以直接在类上调用。

我做到了,但应用程序崩溃的事实意味着我做的不好。这是我的代码:

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'

【问题讨论】:

    标签: ios swift uicollectionviewcell uitapgesturerecognizer


    【解决方案1】:

    问题似乎在这里: 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
    }
    

    【讨论】:

      【解决方案2】:

      问题出在目标所以替换这个

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

      【讨论】:

        猜你喜欢
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多