gpt4 book ai didi

ios - 当按下 uicollectionviewcell 中的某些内容时如何通知 Controller

转载 作者:行者123 更新时间:2023-12-01 16:14:33 25 4
gpt4 key购买 nike

我有 UICollectionViewCell 类的扩展。当在这个单元格中按下某些东西时,我试图通知 Controller 。我不太确定协议(protocol)委托(delegate)模式是否是解决方法。我不确定在这种情况下如何使用它。我在 UICollectionViewCell 类的扩展之外有以下类。

协议(protocol) bundleThreadsDelegate: 类 {
func bundleThreadsDidSelect(_ viewController: UIViewController)
}

我有以下属性:

公共(public)弱 var 委托(delegate):bundleThreadsDelegate?在我的扩展中。

我不太确定从这里开始。请帮忙。

最佳答案

您说的是“当在此单元格中按下某些东西时”,而不是在按下单元格本身时,所以我假设您可能需要在您的单元格中使用多个可操作的项目。如果这就是你真正的意思,那么在你的 UICollectionViewCell 中,您可以简单地添加 UIButton (不需要这里提到的委托(delegate),因为所有事情都可以在同一个 View Controller 中发生——在不同对象之间通信时使用委托(delegate)):

class MyCollectionViewCell: UICollectionViewCell {

let someButton = UIButton()

...

}

当您创建 UICollectionView ,为使其最简单,将其所在的 View Controller 设置为数据源:
let myCollection = UICollectionView(frame: .zero, collectionViewLayout: MyCollectionViewFlowLayout())
myCollection.dataSource = self
...

然后在您的数据源中,这将类似于 MyViewController ,给按钮一个目标:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

let path = indexPath.item
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyCollectionViewCell
cell.someButton.addTarget(self, action: #selector(someButtonAction(_:)), for: .touchUpInside)
return cell

}

并确保操作方法也在 MyViewController 中连同数据源。
@objc func someButtonAction(_ sender: UIButton) {

print("My collection view cell was tapped")

}

现在,您可以在一个 Collection View 单元格中拥有多个按钮来执行不同的操作。您还可以将单元格中的参数传递给按钮操作以进行进一步自定义。

但是,如果您想在按下整个单元格时执行操作,请使用已经提到的委托(delegate)方法(或将整个单元格设为 UIButton,这并不优雅,但可以解释)。

关于ios - 当按下 uicollectionviewcell 中的某些内容时如何通知 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47619756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com