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 次 |
最近记录: |