为什么与高度相关的方法放在UITableViewDelegate中,而不是放在UITableViewDataSource中

时间:2017-08-29 09:45:03

标签: ios uitableview

我在测验中发现一个问题是“哪个UIKit协议包含方法-tableView:heightForRowAtIndexPath:?

没有任何负载,我想到的协议是 UITableViewDataSource 。但是当我检查苹果开发者文档时,我发现我错了。 UITableViewDelegate 是包含该方法的协议。

在此之前,我理解这些高度方法是数据源协议的一部分。

将它们放在UITableViewDelegate而不是UITableViewDataSource中是否有任何特定原因?

为什么将以下功能放在 UITableViewDelegate

  • heightForRowAt indexPath
  • heightForHeaderInSection
  • heightForFooterInSection

以及为什么以下函数放在 UITableViewDataSource

  • numberOfSectionsInTableView
  • numberOfRowsInSection

在此之前,我认为这些是相似类型的功能,因此这些方法必须放在相同的协议中。

请告诉我。

提前致谢

4 个答案:

答案 0 :(得分:6)

UITableViewDelegate 表示您提供有关表格布局的请求以及用户在tableview上执行的操作的答案。

UITableViewDatasource 表示您为表的节和行提供数据,并对您更改表格数据的消息采取行动。

有关详情,请查看DataSourceDelegate

答案 1 :(得分:5)

numberOfSectionsInTableViewnumberOfRowsInSection是回答有关要显示的数据的问题的函数,这就是为什么它们可以在 DataSource协议中找到

heightFor...函数不回答有关基础数据的任何内容,而只回答数据显示方式。这就是为什么他们是代表协议的一部分。

这对你有意义吗?

答案 2 :(得分:0)

数据源提供数据,委托提供行为。

MVC中,数据源位于模型层中,委托位于控制层中。

实际上,在第二个想法中,数据源通常是较低的控制器,更靠近模型。我不认为我曾经使用过模型对象作为我的数据源。

答案 3 :(得分:0)

tempDir的{​​{1}}潜在客户由UI方法和UITableView提供(我们不是在{{1}内讨论要使用的数据,UITableViewDelgate方法提供构建data所需的cellUIsection等)重复信息。< / p>