UITableViewDelegate和UITableViewDatasource混淆

l0g*_*g3r 7 objective-c uitableview uikit ios

之前我理解该
Delegate模式仅用于调用事件delegate instance和获取控件(如size/font/etc ...).

Datasource模式仅用于从中获取数据datasource instance(如views/title/description/etc ...)

但看起来这是一个很好的错觉,在看了Apple之后UITableViewDelegate protocol我感到困惑,因为

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
Run Code Online (Sandbox Code Playgroud)

委托方法(但我认为它们是UITableViewDatasource方法)

这是来自Apple的脏代码,还是我遗漏了一些重要的东西,了解数据源和委托之间的区别?

编辑: 谢谢@DBD的好回答,这里更混乱

这是UITableViewDelegate方法,它返回View以进行绘制

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

而且UITableViewDataSource中还有一个配置

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

而且,我们可以看到一个在UITableViewDataSource中返回View的方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

这里我们有问题为什么cellForRowAtIndexPath:viewForHeaderInSection:不在UITableViewDataSource中

DBD*_*DBD 8

这就是我一直在想的.

UITableViewDataSource成为主要数据.该表的实际内容是什么.多少行?第X行的内容是什么?

UITableViewDelegate是次要的和显示数据.它应该有多高,如果它显示在选定的状态,并回电"嘿,我要做某事."

但是我承认我看到它的一些细节(我不买一些选择)

UITableViewDataSourcetitleForHeaderInSection. UITableViewDelegateviewForHeaderInSection.

因此,如果它是纯粹的"数据"标题,那么它就是数据源,但如果包含带有视图的显示包装器,那么它就是委托.但等等,cellForRowAtIndexPath是一个视图,这是数据源的一部分,那你为什么要viewForHeaderInSection加入代理呢?虽然我几乎看不到作为数据的"单元格"和作为委托的"标题视图"之间的区别,但我认为将"标题"方法拆分成不同协议的混淆并不可取.我相信很多人可能会反对我,但这只是我的看法.