我有一个包含多个自定义UICollectionViewCell
的快捷应用程序。所有单元格都有用户可以点击的多个对象(UIImageView
或UILabel
)(因此,我使用多个UITapGestureRecognizer
来调用相应的动作。作业并减少代码的重复性,我想用extension
方法创建一个UITapGestureRecognizer
的{{1}},可以直接在类上调用。
我做到了,但是应用程序崩溃的事实意味着有些事情我做得不好。这是我的代码:
static
控制台错误说:
由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'+ [UITapGestureRecognizer likeImageTapped]:无法识别的选择器已发送给类0x1b52e4c50'
答案 0 :(得分:5)
问题似乎在这里:
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
}
答案 1 :(得分: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)
}