Bol*_*ion 0 ios uitapgesturerecognizer uicollectionviewcell swift
我有一个带有多个custom UICollectionViewCell的快捷应用程序。所有细胞都有多个对象(无论是UIImageView或UILabel),用户可以点击(因此,我使用多个UITapGestureRecognizers到调用相应的行动。现在,为了减轻我的工作,使代码少重复,我想创造一个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() {
}
}
Run Code Online (Sandbox Code Playgroud)
控制台错误说:
由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ [UITapGestureRecognizer likeImageTapped]:无法识别的选择器发送到类0x1b52e4c50'
问题似乎在这里:
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |