UITapGestureRecognizer 静态方法崩溃
Posted
技术标签:
【中文标题】UITapGestureRecognizer 静态方法崩溃【英文标题】:UITapGestureRecognizer static method crashes 【发布时间】:2018-07-05 14:19:08 【问题描述】:我有一个带有多个自定义UICollectionViewCell
s 的快速应用程序。所有单元格都有多个用户可以点击的对象(UIImageView
或 UILabel
)(因此,我使用多个UITapGestureRecognizer
s 来调用相应的操作。现在,为了减轻我的工作并减少代码重复,我想创建一个 UITapGestureRecognizer
的 extension
和 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'
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于UITapGestureRecognizer 静态方法崩溃的主要内容,如果未能解决你的问题,请参考以下文章
UITapGestureRecognizer 不适用于 UIView 动画
使用 UITapGestureRecognizer 无法识别的选择器
UIlabel 中的 UITapGestureRecognizer 错误