如何与自定义 UICollectionViewCell 单元格交互

Posted

技术标签:

【中文标题】如何与自定义 UICollectionViewCell 单元格交互【英文标题】:how to interact with custom UICollectionViewCell cell 【发布时间】:2019-02-09 15:59:57 【问题描述】:

我有一个 UICollectionViewController,它可以垂直滚动(就像一个表格视图)。我创建了一个自定义 UICollectionViewCell。在自定义单元格内部,有复选标记。当用户单击复选标记时,我需要某种事件来单击。

我尝试过的,是压倒一切的:

 override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
        print("clicked")
    

但这仅在用户单击单元格时执行。但是,如上所述,单元格包含复选标记...我需要找出每个复选标记被单击的时间。

这可能吗?

【问题讨论】:

你能放更多你的细胞类的代码吗? 当然有可能:希望这会有所帮助:link: closures and delegates 【参考方案1】:

您可以将 IBAction 添加到 UICollectionViewCell 类并处理来自该 IBAction 的点击,如果您需要它来更改父视图控制器上的某些内容,您有几个选项,您可以使用委托或传递控制器到单元格。

在父视图控制器上:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CustomCollectionViewCell
    cell.controller = self 
    return cell

关于 UICollectionViewCell 类:

var controller: ParentViewController? 

@IBAction func checkmarkPressed(sender: UIButton) 

    print("checkmarkPressed")

   controller.someFunction()


【讨论】:

哇,太好了,谢谢。但是,在我的自定义 UICollectionViewCell 单元格中,我以编程方式创建了 4 个标签。当有人单击 CollectionView 内的单元格时,我需要更改文本。有没有我可以命名每个标签,以便我知道每个标签在 cellForItemAtIndexPath 内? 您可以为 CollectionViewCell 中的每个标签创建 IBOutlets,然后您可以从 cellForItemAt 访问每个标签,例如 cell.labelOne、cell.labelTwo 等。

以上是关于如何与自定义 UICollectionViewCell 单元格交互的主要内容,如果未能解决你的问题,请参考以下文章