- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!