gpt4 book ai didi

ios - 为什么在cellForItemAt中设置单元格属性不好?

转载 作者:行者123 更新时间:2023-11-28 19:28:21 26 4
gpt4 key购买 nike

在与其他 iOS 开发者的一次 session 上,我无意中听到了对在 cellForItemAt 中设置 View 属性(例如背景颜色、图像、标签等)的批评,因为这是“错误的做法”。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let headerCell = calendarCollectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! CustomCell
cell.backgroundColor = .red
cell.titleLabel = "This is my text"
return cell
}

我知道设置 View 属性的正确方法是在自定义单元格文件中进行设置,但我不确定在此处进行设置与自定义单元格文件之间有何区别。如果代码的行为相同,有什么区别,为什么这是“错误的做法”?是因为这与 MVC 模式冲突吗?

最佳答案

这与您在编写面向对象代码时做出的任何其他决定没有什么不同。代码应该放在它所属的地方。

您有一个自定义单元格。该自定义单元格应该比使用它的任何 View Controller 更了解自己。自定义单元格应该是根据 View Controller (实际上是 TableView 的数据源)提供给单元格的数据和状态信息创建和设置自己的 subview 的主要类。

人们在 cellForRow 中填充过多的单元格设置代码是很常见的。这是一种不好的做法。单元格是一个 View 。 View 负责根据需要自行设置。数据源( Controller )应该只给单元格数据和状态,然后单元格应该相应地配置自己。

话虽如此,自定义单元格 View 也可能有些通用,不同的 Controller 可能希望单元格显示不同。一个很好的简单示例是问题中的代码。该 Controller 希望单元格具有红色背景。但是另一个 Controller 可能使用相同的单元格类但需要蓝色背景。对于像这样的简单情况, Controller (cellForRowAt) 是设置单元格颜色的好地方。

在简单的情况下,在 cellForRowAt 中放置几行来设置颜色和标题。

在单元格显示图像、多个文本值和布局更复杂的更复杂的情况下,cellForRowAt 应该将数据传递给单元格,单元格应该完成所有复杂的布局。这将细胞结构的知识转移到它所属的细胞。

想想 iOS SDK 提供的其他 View 类,您不直接设置 subview 属性。示例包括 UIAlertController/UIAlertActionUITextField 等等。您在这些 View 上设置属性, View 会相应地自行更新。以类似的方式处理表格 View 单元格。

关于ios - 为什么在cellForItemAt中设置单元格属性不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49181967/

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