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中
这就是我一直在想的.
UITableViewDataSource成为主要数据.该表的实际内容是什么.多少行?第X行的内容是什么?
UITableViewDelegate是次要的和显示数据.它应该有多高,如果它显示在选定的状态,并回电"嘿,我要做某事."
但是我承认我看到它的一些细节(我不买一些选择)
UITableViewDataSource有titleForHeaderInSection.
UITableViewDelegate有viewForHeaderInSection.
因此,如果它是纯粹的"数据"标题,那么它就是数据源,但如果包含带有视图的显示包装器,那么它就是委托.但等等,cellForRowAtIndexPath是一个视图,这是数据源的一部分,那你为什么要viewForHeaderInSection加入代理呢?虽然我几乎看不到作为数据的"单元格"和作为委托的"标题视图"之间的区别,但我认为将"标题"方法拆分成不同协议的混淆并不可取.我相信很多人可能会反对我,但这只是我的看法.
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |