У меня есть быстрое приложение с несколькими пользовательскими UICollectionViewCell
с. Во всех ячейках есть несколько объектов (UIImageView
или UILabel
), на которые пользователь может нажать (следовательно, я использую несколько UITapGestureRecognizer
s для вызова соответствующего действия. Теперь, чтобы облегчить свою работу и сделать код менее повторяюсь, я хотел создать 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() {
}
}
Ошибка консоли говорит:
Завершение приложения из-за необработанного исключения
'NSInvalidArgumentException', причина: '+ [UITapGestureRecognizer
likeImageTapped]: нераспознанный селектор отправлен в класс 0x1b52e4c50 '