gpt4 book ai didi

swift - 如何从其他自定义 UICollectionViewCell 引用 UICollectionView

转载 作者:行者123 更新时间:2023-11-30 12:05:31 38 4
gpt4 key购买 nike

我有一个 UIViewController,它有一个带有 4 个自定义单元格的 UICollectionView。在其中一个单元格中,我有一个 UIButton,点击它时需要访问另一个单元格,以更新 UIImage。如何在 UIViewController 中引用 collectionView 引用以将其传递给其他 NIB?

//CollectionView
@IBOutlet weak var collectionView: UICollectionView!

我是否需要在override func awakeFromNib()中添加一些内容以引用其他单元格?

示例:

let myCell = collectionView!.cellForItem(at: myIndexPath) as! MainCollectionViewCell

如何从其他 NIB 引用 collectionView

谢谢

最佳答案

从架构的角度来看,答案是“你不需要”。

正确的答案是拥有一个 Model 类,可能具有代表模型不同部分的属性。当用户点击按钮时,它会以某种方式影响模型(按钮操作应该调用模型对象上的方法。方法的名称应该对应用程序的用户有意义。)

当模型改变状态时,它应该通知所有观察者。查找观察者模式,但基本上,它就像一个委托(delegate)数组。

应将包含 UIImage 的单元格设置为观察模型并对模型中的更改使用react,在本例中,模型中的更改恰好是由于按钮点击造成的,但也可能通过其他方式发生。

首先你需要一个模型类:

class MyModel {
typealias Observer = (MyModel) -> Void

func add(observer: @escaping Observer) {
observers.append(observer)
}

func updateImage() {
// do what you need to do to update `myImage`
// then call:
update()
}

private (set) var image: UIImage?
private var observers = [Observer]()

private func update() {
for each in observers {
each(self)
}
}
}

然后在 View Controller 中创建该模型的实例:

let model = MyModel()

现在将 View Controller 的模型传递给 cellForItemAt 方法内的每个单元格。

cell.model = model

在包含图像的单元格中,为其指定一个模型属性,如下所示:

var model: MyModel! {
didSet {
model.add(observer: { [weak self] updated in
self?.imageView.image = updated.image
})
}
}

具有按钮的单元格将具有普通模型属性,并且在按钮的 IBAction 中,您将调用 model.updateImage()

var model: MyModel!

@IBAction func buttonTapped(_ sender: Any) {
model.updateImage()
}

关于swift - 如何从其他自定义 UICollectionViewCell 引用 UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720757/

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