一. UITableView的概念
UITableView是继承于UIScrollView,可以滚动.UITableView的每一条数据叫做一个Cell,是UITableViewCell的一个对象,继承于UIView.UITableView可以分区显示,每一个分区为一个section,每一行称为row,编号都从0开始.系统提供了一个专门的类来整合section和row,叫做NSIndexPath.
二. UITableView的基本使用
UITableView有自己的初始化方法- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style 使用该方法初始化UITableView的对象.UITableViewStyle类型是一个枚举类型,有两个枚举值UITableViewStylePlain,和UITableViewStyleGrouped
UITableView的相关属性:
rowHeight(行高) separatorStyle(分割线样式) separatorColor(分割线颜色)
tableHeaderView(UITableView的置顶视图) tableFooterView(UITableView的置底视图)
separatorInset(设置分割线与tableView左右的间距,类型为UIEdgeInsets类型)
三. UITableView显示数据
UITableView中有两个重要的属性:
1. delegateSource(显示数据相关的代理) <UITableViewDataSource>
UITableView的DataSource是负责给UITableView对象提供数据的代理,遵循UITableViewDataSource协议.协议中有两个必须实现的方法.
UITableView每个分区的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
每一行要显示一个cell
- (UITableViewCell *)tabView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
使用cell对象的时候从复用池中获取一个cell的对象,如果获取不到,则新创建一个cell
使用tabView的实例方法dequeueReusableCellWithIdentifier可以找到复用池中的cell对象.
优点优化内存管理.
2. delegate (视图操作相关代理) <UITableDelegate>
UITableView的每一个单元格是UITableViewCell类的对象.,继承于UIView
UITableViewCell默认提供了3个视图属性.
imageView (图片视图) textLabel(标题视图) detailTextLabel(副标题视图)
四. UITableViewCell的重用机制
UITableViewCell的一个对象划出屏幕的时候,这个cell对象就会被系统自动放到相应的重用池中,当UITableView的对象需要一个cell的时候,会先去重用池中获取一个cell,如果没有则新建一个cell,取到cell后进行赋值操作.
五. UITableView和数组的结合使用
设置分区要显示的行数为数组的元素个数,将数据源保存在数组中,则cell需要的数据数为数据源的下标.
六. UITableView的常用协议方法
UITableViewDataSource
- (NSInteger)numberOfSectionInTableView:(UITableView *)tableView;(UITableView的分区个数)
- (NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView; (右侧索引)
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;(分区顶部标题)
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section; (分区底部标题)
UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; (每一行的高度)
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section; (每一个分区顶部的高度)
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; (自定义分区顶部视图)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; (cell的点击方法,告诉delegate点击了哪个cell)