UICollectionViewCell中UIImageView的UITapGestureRecognizer点击无响应排查
解决UICollectionViewCell中UIImageView点击手势无响应的问题
嘿,这个问题我之前开发时也踩过坑,主要是两个容易忽略的点导致的,咱们一步步来改:
1. 开启UIImageView的用户交互权限
UIImageView默认的isUserInteractionEnabled属性是false,也就是说它默认不接收任何触摸事件,这是手势没响应的最常见原因。你需要在添加手势前手动开启这个属性:
func setup(){ imgPhoto.isUserInteractionEnabled = true // 这行是关键! let rec = UITapGestureRecognizer.init(target: self, action: #selector(tap)) imgPhoto.addGestureRecognizer(rec) }
2. 确保setup()方法被正确调用
光写了setup方法还不够,你得保证它在合适的时机被执行。通常我们会在cell的awakeFromNib()方法里调用(如果是xib创建的cell),或者在collectionView(_:cellForItemAt:)方法中拿到cell后调用:
方式一:在cell内部的awakeFromNib中调用
override func awakeFromNib() { super.awakeFromNib() setup() // 确保初始化时执行setup }
方式二:在collectionView的数据源方法中调用
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "你的CellID", for: indexPath) as! ImageGalleryCell cell.setup() // 这里调用setup // 其他配置代码 return cell }
额外检查项
如果上面两步改完还是没反应,可以再检查这两个地方:
- 确认
ImageGalleryCell本身的isUserInteractionEnabled是true(默认是true,除非你手动设为false了) - 检查
@objc func tap()方法的签名有没有写错,比如方法名拼写错误,或者忘记加@objc关键字(你代码里加了,这个没问题,但还是提一下)
修改完之后再运行,应该就能正常打印"tap"了!
内容的提问来源于stack exchange,提问作者WorieN
相关产品推荐
相关产品推荐

