ios – UITableViewDelegate和UITableViewDatasource混淆

我之前就明白了
委托模式仅用于调用事件以委托实例和获取控件(如size / font / etc …).

数据源模式仅用于从数据源实例获取数据(如views / title / description / etc …)

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

是委托方法(但我认为它们是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中

解决方法

这就是我一直在想的.

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

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

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

UITableViewDataSource具有titleForHeaderInSection.
UITableViewDelegate具有viewForHeaderInSection.

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...