当我尝试将 TapGestureRecognizer 添加到我的 UIImageView 时出现此错误:Unrecognized selector sent to class
Posted
技术标签:
【中文标题】当我尝试将 TapGestureRecognizer 添加到我的 UIImageView 时出现此错误:Unrecognized selector sent to class【英文标题】:I get this error when I try to add TapGestureRecognizer to my UIImageView : Unrecognized selector sent to class 【发布时间】:2017-01-31 08:45:30 【问题描述】:我有这个 DiaryCell (collectionviewcell) 类,我正在尝试在该类中添加一个手势识别器来调用另一个类的 collectionViewController 的方法。
class DiaryCell: UICollectionViewCell
override init(frame: CGRect)
super.init(frame: frame)
setupViews()
required init(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
//imageview for favorite button
let favoriteImageView: UIImageView =
let imageView = UIImageView()
imageView.image = #imageLiteral(resourceName: "favorite_gray")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
return imageView
()
//imageview for menu button
let menuImageView: UIImageView =
let imageView = UIImageView()
imageView.image = #imageLiteral(resourceName: "menu_image")
imageView.contentMode = .scaleAspectFit
imageView.clipsToBounds = true
imageView.isUserInteractionEnabled = true
imageView.translatesAutoresizingMaskIntoConstraints = false
return imageView
()
我尝试了不同的策略,但我无法将手势识别器添加到 menuImageView。我已经尝试过这样做,其中 HomeCollectionViewController 是我想要在点击图像时处理操作的控制器。
imageView.addGestureRecognizer(UITapGestureRecognizer(target: HomeCollectionViewController.self, action: #selector(HomeCollectionViewController.menuBarPressed))
【问题讨论】:
setupViews()
?这是做什么的。
它为整个单元格设置约束。我不知道为什么我的问题底部的行不起作用。
您是否添加了 TapGestureDelegate。需要设置为HomeCollectionViewController
@SachinVas 我不确定你的意思。你能详细说明一下吗?很抱歉,但有时我需要更多信息才能理解某些内容。
let gesture = UITapGestureRecognizer(target: HomeCollectionViewController.self, action: #selector(HomeCollectionViewController.menuBarPressed) gesture.delegate = HomeCollectionViewController.self imageView.addGestureRecognizer(gesture)
【参考方案1】:
问题在于,虽然您的代码是合法且可以编译的,但它是错误的。
您正在将手势设置为发送到类型而不是实例。您需要将目标设置为HomeCollectionViewController
的实际实例
实现此目的的一种方法是在单元格中设置对控制器的弱引用。
class DiaryCell: UICollectionViewCell
var tapGesture:UITapGestureRecognizer?
weak var gestureTarget: HomeCollectionViewController?
didSet
setupGestures()
func setupGestures()
if let tapGesture = tapGesture
removeGestureRecognizer(tapGesture)
self.tapGesture = nil
if let gestureTarget = gestureTarget
let gesture = UITapGestureRecognizer(target: gestureTarget, action: #selector(HomeCollectionViewController.menuBarPressed))
addGestureRecognizer(gesture)
tapGesture = gesture
您可能会在您的collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
方法中设置gestureTarget
虽然这可以解决您的问题,但它不是处理事情的好方法,您应该了解如何使用委托作为编码模式。
【讨论】:
以上是关于当我尝试将 TapGestureRecognizer 添加到我的 UIImageView 时出现此错误:Unrecognized selector sent to class的主要内容,如果未能解决你的问题,请参考以下文章
为啥当我尝试将 rails 更新到 4.0.0 时会发生这种情况?