首页 > 解决方案 > 如何将手势识别器添加到集合视图单元格中的视图?

问题描述

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)
}
}

我究竟做错了什么?

标签: swiftuigesturerecognizer

解决方案


你试过了吗?

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(linkPreviewViewWasPressed))
cell.linkPreviewView.addGestureRecognizer(tapGestureRecognizer)
cell.linkPreviewView.isUserInteractionEnabled = true
return cell

推荐阅读