* UITableView及其两种风格和三部分
*UITableView可以在上面放cell的视图
*UITableView有两种风格⬇️和三部分
*UITableViewStylePlain (普通风格)
*UITableViewStyleGrouped (分组风格)
*表头tableHeaderView
*表尾tableFooterView
* UITableViewController
* UITableViewCell及其四种风格
#pragma -UITableViewCell及其四种风格-
UITableViewCell *Cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellID"];
//cell的标识符 reuseIdentifier
textLabel、detailTextLabel、imageView,不同风格的cell,这三种控件的摆放风格不同
*UITableViewCellStyleDefault 图片居左 textTabel居右detailTextLabel默认不显示
*UITableViewCellStyleValue1 图片居左 textTabel在图片右边 detailTextLabel居右
*UITableViewCellStyleValue2 图片默认不显示 textTabel居左 detailTextLabel居中
*UITableViewCellStyleSubtitle 图片居左 textTabel在图片右边的上面 detailTextLabel在图片的右边的下面
rowHeight 设置cell的高度
Cell.accessoryType cell风格
UITableViewCellAccessoryNone//无风格
UITableViewCellAccessoryDisclosureIndicator//右边有个小箭头
UITableViewCellAccessoryDetailDisclosureButton//右边有个小箭头和一个圈i
UITableViewCellAccessoryCheckmark//右边有个小对号
UITableViewCellAccessoryDetailButton//右边有一个圈i
初始化的时候设置的风格
UITableViewStylePlain 表头浮在窗口上
UITableViewStyleGrouped 表头跟着一起动 有默认的分隔
如果想要分组的样式的话必须使用initWithFrame:style: 初始化 使用这个是默认的平铺样式 不能后期设置
[myTableView reloadData];
reloadData 刷新整个tableView 所有的代理方法都会重新调用一次
#pragma ---视图、cell代理方法---
//dataSource是数据相关的代理方法
//delegate 是视图相关的代理方法
** 通过代理给UITableView设置cell
*挂上代理名字
*挂上代理
tableView.delegate = self;
tableView.dataSource = self;
*实现代理方法
#pragma -必须实现的两个代理方法-
//行数 默认是1
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 1;
}
//指定cell(内容)每次在屏幕上显示一个cell就会调用一次方法
- (UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
*实现自定义不同风格的cell在一个页面显示
if (indexPath.row!=3) {
//1、生成一个不可以改变的标识cell的标识符
static NSString *ID = @"cellId";
//2、在tableView上查找是否有可以复用的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//判断 如果没有找到可以复用的cell 就创建一个
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
NSLog(@"%d",num++);
}
//如果找到了可以复用的cell 就无需创建
cell.textLabel.text = list[indexPath.row];
return cell;
}
static NSString *myID = @"my";
MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:myID];
if (!cell) {
cell = [[MyTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myID];
cell.backgroundColor = [UIColor orangeColor];
}
return cell;
}
//段数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 3;
}
***TableViewcell的重用机制
* UITableView每次滑动,必定有消失的cell,系统会自动将这些消失的cell放到缓存池里,需要新cell时,系统先在缓存池里看是否有cell,有的话就利用,没有的话就新建。
重用机制->滚筒原理->只有固定一屏的视图 超出后重用这一屏的视图 一直滚动循环复用 只需更改上面的数据
*前提:UITableView滑动
*1、旧的cell消失,系统会自动将这些消失的cell放到缓存池里
*2、新的cell出现,就会调用代理方法(①系统先在缓存池里看是否有cell,②有的话就利用,没有的话就新建)
*3、在代理方法中return返回cell
#pragma -cell编辑、移动代理方法---
//设置编辑的样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCellEditingStyleNone,没有(移动)
UITableViewCellEditingStyleDelete,删除
UITableViewCellEditingStyleInsert插入
//YES 可以移动
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
//提交编辑的时候 调用
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
//专门用于移动的时候调用
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
#pragma ---表头、表尾的代理方法---
//设置表头的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
//设置表尾的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
//设置表头的视图
- (nullable UIView *)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section;
//设置表尾的视图
- (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
//设置表头的标题
- (nullable NSString *)tableView:(UITableView*)tableView titleForHeaderInSection:(NSInteger)section;
//设置表尾的标题
- (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;