如何从嵌套的 CollectionView 单元格传递按钮操作?

2024-02-19

我有一个 MainCollectionView 用于在项目之间滚动,在这些单元格之一内我有另一个带有单元格的 collectionView 。在该集合视图中,每个单元格都有一个按钮。我的问题是,当点击按钮时,如何将操作从按钮传递到 MainCollectionView?我确实为单元格中的该按钮创建了协议,但我不知道如何让 MainCollectionView 知道何时点击我的按钮。我可以从我的单元类中调用操作,但我认为最好在模型(即我的 MainCollectionView)中运行它。以下是我的按钮协议。

protocol ThanhCaHotTracksCellDelegate: class {
func handleSeeAllPressed()}

weak var delegate: ThanhCaHotTracksCellDelegate?


@objc func handleSeeAllButton(){
 delegate?.handleSeeAllPressed()
}

正如 NSAdi 所说,您走在正确的轨道上,但是对于单个任务(例如通知按钮按下情况)来说,委托模式的开销有点大。

我更喜欢使用闭包,因为它们是轻量级的并且有助于将相关代码保持在一起。

使用闭包

这就是我一直在做的事情UITableView。所以这将适用于UICollectionView too.

class MyTableViewCell: UITableViewCell {
    var myButtonTapAction: ((MyTableViewCell) -> Void)?

    @IBAction func myButtonTapped(_ sender: Any) {
        myButtonTapAction?(self)
    }
}

所以当我将我的单元出队并将其投射到MyTableViewCell我可以设置一个自定义操作,如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCellReuseIdentifier", for: indexPath) as! MyTableViewCell

    cell.myButtonTapAction = { cell in
        // Put your button action here
        // With cell you have a strong reference to your cell, in case you need it
    }
}

使用直接引用

当你出队时UICollectionView您可以通过将单元格转换为单元格的自定义子类来获取对按钮的引用。

然后只需执行以下操作

cell.button.addTarget(self, action: #selector(didTapButton(_:)), forControlEvents: .TouchUpInside)

而外面有一个函数:

@objc func didTapButton(_ sender: UIButton) {
    // Handle button tap
}

这样做的缺点是您无法直接访问您的手机。你可以使用button.superview?但这不是一个好主意,因为您的视图层次结构可能会改变......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从嵌套的 CollectionView 单元格传递按钮操作? 的相关文章

随机推荐