【问题标题】:Why is `heightForRowAt` implemented in `UITableViewDelegate` and not `UITableViewDataSource`? [closed]为什么在 `UITableViewDelegate` 而不是 `UITableViewDataSource` 中实现了 `heightForRowAt`? [关闭]
【发布时间】:2021-09-18 03:46:48
【问题描述】:

这个问题在本质上更具教学性,但为什么heightForRowAt 是在UITableViewDelegate 而不是UITableViewDataSource 中实现的?

UITableViewDataSource 中定义行高不是更有意义吗?

既然一行的高度应该取决于该特定行的内容,因此扩展数据源?

【问题讨论】:

  • UITableviewDatasource 专注于数据(即:行数、提供单元格类以及如何填充数据、页眉/页脚的标题等,而不是 View/UserInterfaction。这就是为什么?

标签: ios swift uitableview


【解决方案1】:

Tableview 是一个非常复杂的视图,作为一个视图,它必须是可重用的。这只有在表格视图的某些方面留给其他类时才能实现。表格视图使用两个类,一个委托和一个数据源。

数据源负责需要在表格中显示的数据。该数据来自 MVC 范式中的模型对象。

委托负责表应如何表示自己。虽然行高是一条数据,可能会让您认为它应该是数据源的一种方法,但行高设置了表格视图的布局项,因此设置了表格视图的表示。

因此 heightForRowAt 是一个委托方法而不是数据源方法。

亲切的问候, Mac用户T

【讨论】:

  • 感谢您的洞察力。我很感激。
猜你喜欢
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多