我想在我的CollectionViewCell中添加一个tap事件,并将它所拥有的数据传递给我的cell。我怎样才能做到这一点?
此事件应该由我的ViewController处理还是由CollectionViewCell处理?
我的ViewController

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
    cell.imgImage.image = imageArray[indexPath.row]
    cell.url = "xhini"

    return cell
}

我的CollectionViewCell
class CollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var imgImage: UIImageView!
    var url: String = "url"
}

ios - 在传递单元格数据时将Tap事件添加到CollectionViewCell-LMLPHP

最佳答案

实现UICollectionViewDelegate,然后可以使用ViewController中的以下方法对选择单元格作出反应:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let image = imageArray[indexPath.row]
    // do stuff with image, or with other data that you need
}

不要忘记在设置数据源的位置设置委托:
collectionView.dataSource = self
// add this line:
collectionView.delegate = self

更新
或者,如果您使用的是序列图像板,您希望使用序列图像板设置它,就像为dataSourcetableView设置数据源一样:
ios - 在传递单元格数据时将Tap事件添加到CollectionViewCell-LMLPHP
更新2
手势识别器取消集合视图的事件,因此要处理此问题,只需取消对tap行的注释,它就会工作:
    //Looks for single or multiple taps.
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.dismissKeyboard))
    //Uncomment the line below if you want the tap not not interfere and cancel other interactions.
    tap.cancelsTouchesInView = false
    view.addGestureRecognizer(tap)

关于ios - 在传递单元格数据时将Tap事件添加到CollectionViewCell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48612109/

10-11 05:31