【发布时间】:2018-07-05 14:19:08
【问题描述】:
我有一个带有多个自定义UICollectionViewCells 的快速应用程序。所有单元格都有多个用户可以点击的对象(UIImageView 或 UILabel)(因此,我使用多个UITapGestureRecognizers 来调用相应的操作。现在,为了减轻我的工作并减少代码重复,我想创建一个 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'
【问题讨论】:
标签: ios swift uicollectionviewcell uitapgesturerecognizer