确保cellForRowAtIndexPath不包含单元格视图修改代码是一种好习惯吗?

时间:2018-02-19 14:26:54

标签: ios uitableview model-view-controller

最近,当我正在努力为我的应用添加“黑暗/夜晚”模式时,我想到了这个想法。

定期在cellForRowAtIndexPath我当然会将我的数据源“连接”到我新创建/重用的单元格。

设置单元格数据/字符串/值等,准备显示。

然而,虽然认识到MVC,我自己,有时会设置单元格背景颜色或其他一些细胞子视图相关属性(动画/颜色/文本样式)。 - 如果这是一个真正糟糕的编码风格,我正在工作?

在我创建夜间模式的过程中,我将与视图修改相关的所有代码(颜色/样式/美学)移动到每个视图类中。

然后在重新加载我的tableView后,我设置了每个单元格并且最终调用它们的新函数来布局它们的美学 - 它现在位于单元格类中。

Ergo,我的cellForRowAtIndexPath只有一次调用单元格实例来改变它的外观和感觉,其余的代码纯粹是在单元格上设置数据。

  • 这是纯粹的MVC方法吗?
  • 这是一个好习惯吗?
  • 是否可以调用我的tableView的重载方法来触发调用以根据需要更新单元格,只要我的viewController想要改变外观,或者我应该保留引用分别到每个细胞?

1 个答案:

答案 0 :(得分:2)

你的问题的答案是非常主观的。

在我看来,在大多数情况下,单元格的出口应该是单元格类的私有,而不是将不需要的信息暴露给viewController。我更喜欢在单元格的类中创建几个方法,例如:func populate(_ with: SomeDataType) - 用于填充单元格。通过这种方式,细胞可以更加封装和重复使用。

  

按顺序调用tableView的重载方法是否可以接受   每当我的时候触发一个根据需要更新单元格的调用   viewController想要改变外观,或者我应该保持一个   分别参考每个细胞

是的,这是可以接受的,实际上很少有情况需要保留对可重用元素的引用,例如UITableViewCell的实例。请查看Apple documentationReloading the Table View link

中的func reloadRows(at: [IndexPath], with: UITableViewRowAnimation)部分

编辑1: 我觉得你可以从本教程中受益:https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/CreateATableView.html 主要目标是:尝试理解什么是“reuseIdentifier”以及为什么UITableView重用单元格而不是每次应该显示单元格时创建新视图。一旦得到这个,你就会明白为什么保存对tableViewCell的引用很棘手。