首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从其他自定义UICollectionViewCells引用UICollectionView

如何从其他自定义UICollectionViewCells引用UICollectionView
EN

Stack Overflow用户
提问于 2017-10-13 08:21:25
回答 1查看 564关注 0票数 0

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

代码语言:javascript
运行
复制
//CollectionView
@IBOutlet weak var collectionView: UICollectionView!

为了引用其他单元格,我需要在override func awakeFromNib()中添加一些内容吗?

示例:

代码语言:javascript
运行
复制
let myCell = collectionView!.cellForItem(at: myIndexPath) as! MainCollectionViewCell

如何从其他NIB引用collectionView

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-10-13 09:31:00

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

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

当模型改变状态时,它应该通知任何观察者。查看观察者模式,但基本上,它就像一个委托数组。

应该设置带有UIImage的单元,以观察模型并对模型中的更改做出反应,在这种情况下,这些更改恰好是由于轻敲按钮造成的,但也可以通过其他方式发生。

首先,您需要一个模型类:

代码语言:javascript
运行
复制
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)
        }
    }
}

然后在视图控制器中创建此模型的一个实例:

代码语言:javascript
运行
复制
let model = MyModel()

现在将视图控制器的模型传递给cellForItemAt方法中的每个单元。

代码语言:javascript
运行
复制
cell.model = model

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

代码语言:javascript
运行
复制
var model: MyModel! {
    didSet {
        model.add(observer: { [weak self] updated in 
            self?.imageView.image = updated.image
        })
    }
}

包含该按钮的单元格将具有一个正常的模型属性,并且在该按钮的IBAction中,您将调用model.updateImage()

代码语言:javascript
运行
复制
var model: MyModel!

@IBAction func buttonTapped(_ sender: Any) {
    model.updateImage()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46720757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档