Open ShannonChenCHN opened 7 years ago
Controller 中实现 delegate 和 dataSource 方法,管理 UI 和数据、交互。
总共有以下几类方法:
其中两个最常用的方法:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
总共有以下几类方法:
其中以下几个方法最常用:
- (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
基本思想:将数据源方法抽取出来到一个单独的类中
包含哪些内容:
实现哪些方法:下面三个方法都要在这个数据源类中实现
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
(UITableViewCell )tableView:(UITableView )tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
自定义一个继承于 UITableViewDataSource
的 dataSource 协议,包含两个方法
// 每个 indexPath 对应的 cell 的 class,主要是用来给 `cellForRow` 方法创建 cell 用的,子类需要重写
(Class)tableView:(UITableView)tableView cellClassForModel:(SCTableViewCellModel )model;
// 提供一个接口用于获取指定 indexPath 对应的 model
(SCTableViewCellModel )tableView:(UITableView )tableView modelForRowAtIndexPath:(NSIndexPath *)indexPath;
自定义 Cell 要做的事情:实现 -setModel
方法,或者提供 model
属性,用来接收 model 数据
customDelegate
和 customDataSource
,分别用来接收自定义数据源和自定义代理,如果数据源中有数据,自定义 table view 可以直接在内部处理一些系统的代理方法,如果没有,也可以交给外面的 controller 自己去实现customDataSource
的 setter 方法,将 dataSource 中转给 UITableView
的 dataSource
属性UITableViewDelegate
的方法,用来计算 cell 高度,和分发点击事件等setModel
方法、cell 高度计算的方法一些思考: 核心思想:复用+解耦+易于理解、逻辑清晰
- 值得借鉴之处:
- 不同看法:
- 补充:
- 空态页
- 网络错误提示 toast
- 页面缓存
这篇文章主要讲解了如何写好一个列表这个最熟悉的主题,分别讨论了以下几个问题:
核心问题是如何减轻业务方的负责。