UITableView
是iOS
开发中使用最频繁,也是最重要的视图控件,在常用的APP
中随处可见。它继承于UIScrollView
,可以滚动。
UITableView
的每一条数据对应的单元格叫做Cell
,是UITableViewCell
(继承于UIView
)的一个对象。UITableView
可以分区显示,每个分区称为section
,每一行称为row
,编号都从0开始。系统为我们提供了一个专门的类来整合section
和row
,叫做NSIndexPath
。section
和row
代表一个UITableViewCell
在UITableView
上的位置。如下图中,北京的位置为第1个分区第0行。
UITableView
有两种样式:UITableViewStylePlain
和UITableViewStyleGrouped
。这两者操作起来其实并没有本质区别,只是前者按照普通样式显示,后者按分组样式显示而已。以下分别为这两种样式的基本效果:
UITableView
显示的相关属性:
//设置每一行cell的高度
self.tableView.rowHeight = 80;
//设置每一组的头部标题高度
self.tableView.sectionHeaderHeight = 50;
//设置每一组的尾部标题高度
self.tableView.sectionFooterHeight = 50;
//设置分割线的颜色
self.tableView.separatorColor = [UIColor redColor];
//设置分割线的样式
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
//设置表头控件---这里主要应用是打广告
self.tableView.tableHeaderView = [[UISwitch alloc] init];
//设置表尾控件---这里主要应用是加载数据
self.tableView.tableFooterView = [[UISwitch alloc] init];
//设置索引条的文字颜色
self.tableView.sectionIndexColor = [UIColor orangeColor];
//设置索引条的背景颜色
self.tableView.sectionIndexBackgroundColor = [UIColor yellowColor];UITableView
中两个重要的协议:
1.委托协议UITableViewDelegate
:用于定义节头和节尾视图以及响应触摸事件。
@optional
//设置每一行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
//设置每一个分区的顶部自定义视图
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
//设置每一个分区的顶部高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
//告诉delegate选中了一个cell
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
2.数据源协议UITableViewDataSource
:用于定义表视图的数据源和视图样式。
@required
//设置每个分区的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section;
//tableView每次要显示一个cell都会调用这个方法获取
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
@optional
//设置分区个数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
//设置分区标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
//设置索引栏数据
- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView
//设置分区底部标题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
-
UITableView
重用cell
的代码流程:
1.在创建UITableView
之后,需要注册一个cell
类,当重用池中没有cell
的时候,系统可以自动创建cell
:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"MyCell"];
2.系统提供了一个获取重用池中cell
的方法(需要提供一个重用标识):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];
// do something
return cell;
}
以上内容是笔者对
UITableView
基础的总结。由于笔者也是iOS
初学者,总结过程中难免出现纰漏。如发现不足或错误,欢迎批评指正。大家共同学习!共同进步!
有关UITableView
和iOS
的更多知识,请关注小编,期待后续文章!