swift - 如何将手势识别器添加到集合视图单元格中的视图?
问题描述
UICollectionViewCell
我一直在尝试为 a 内部并包含三个视图的视图设置手势识别器。每次我按下该视图时,collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
都会调用而不是手势识别器。
这就是我正在做的事情;
class RealTimePostCollectionViewCell: UICollectionViewCell {
@IBOutlet private var linkPreviewView: UIView!
@IBOutlet private var linkCanonicalURLLabel: UILabel!
@IBOutlet private var linkImageView: UIImageView!
@IBOutlet private var linkTitleLabel: UILabel!
// -------------------------------------------
fileprivate var delegate: RealTimePostDelegate!
fileprivate var contentViewModel: RealTimeContentViewModel!
// -------------------------------------------
class func create(forCollectionView collectionView: UICollectionView,
atIndexPath indexPath: IndexPath,
withReuseIdentifier reuseIdentifier: String,
andContentViewModel contentViewModel: RealTimeContentViewModel,
delegate: RealTimePostDelegate) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! RealTimePostCollectionViewCell
cell.setup(withContentViewModel: contentViewModel, delegate: delegate)
// ----------------------------------------------------------
return cell
}
private func setup(withContentViewModel contentViewModel: RealTimeContentViewModel, currentUserId: String, delegate: RealTimePostDelegate) {
setupGestureRecognizers()
}
fileprivate func setupGestureRecognizers() {
if linkPreviewView.gestureRecognizers?.isEmpty ?? true == true {
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(linkPreviewViewWasPressed))
linkPreviewView.addGestureRecognizer(tapGestureRecognizer)
linkPreviewView.isUserInteractionEnabled = true
}
}
@objc fileprivate func linkPreviewViewWasPressed() {
guard let link = contentViewModel.link, !link.isEmpty else { return }
delegate.linkPreviewWasPressed(link: link)
}
}
我究竟做错了什么?
解决方案
你试过了吗?
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(linkPreviewViewWasPressed))
cell.linkPreviewView.addGestureRecognizer(tapGestureRecognizer)
cell.linkPreviewView.isUserInteractionEnabled = true
return cell
推荐阅读
- scrapy - Scrapy在一定级别的div之后不返回任何数据
- php - 将逗号分隔的字符串传递给codeigniter中的in子句
- java - Hibernate ResultTransformer 返回所有空值的映射
- excel - VBA 在 Excel 中合并列
- sql - 对于一名员工,应在一行上返回 In time 和 Out time
- javascript - jQuery idSelector.bind() 方法无法正常工作
- c# - 在某个位置插入 xml 节点
- javascript - HTML - 内联标签不反映
- amazon-web-services - 生成 CloudFront 签名 URL 的问题;始终拒绝访问
- php - 致命错误:在第 219 行的 /[DIR]/php5.6.10/lib/php/PEAR.php 中调用未定义的方法 PEAR::XML_Parser()