我们为什么要实现单元格的复用机制
单元格每一个cell的生成都是要init alloc的,所以当我们滑动表格试图的时候会生成很多cell,无异于浪费了大量的内存
单元格的复用机制原理
一开始的时候我们创建了桌面最多能显示的单元格数,cell
当我们向下滚动表格试图的时候,单元格上部的内容会消失,下部的内容会出现,这个时候我们将上部分消失的单元格赋给下部分出现的单元格
因此我们就做到了只生成了屏幕范围可显示的单元格个数,就实现滑动表格试图时,以后不会再init alloc单元格cell了,从而实现了节省内存的原理
单元格的复用机制
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
定义一个cell标示符,用以区分不同的cell
以后有不同风格的cell就可以使用了
static NSString *cellID=@”cell”;
从cell复用池中拿到可用的cell
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:cellID];
检测,拿到一个可用的cell
if(cell ==nil)
{
创建新的cell
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID];
}
<3>显示分组数据
显示每段 多少section数据
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return _dataArray.count;
}
告诉表格每段要显示多少行
重要参数:section每次传入制定序号
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSArray *array=_dataArray[section];
return array.count;
}
单元格行的高度
//通过这个方法可以指定任意行的高度。
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44.0f;
}
单元格的背景
单元格的内容视图contentView
某行选中的事件处理
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{}
//某行被取消选中了
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@”被取消选中了”);
}
添加头部视图和尾部视图
// 添加头部试图
UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 100)];
imageView.image=[UIImage imageNamed:@”fenjing.jpg”];
_tableView.tableHeaderView=imageView;
// 添加尾部试图
UIImageView *footImage=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 150)];
footImage.image=[UIImage imageNamed:@”head2.jpg”];
_tableView.tableFooterView=footImage;
表格视图的编辑(难点)
<1>单元格的删除操作[重点, 必须掌握]
<2>单元格的增加操作
<3>单元格的移动操作
<4>多行选中和多行删除操作
2.表格视图的设置
<1>设置表格的索引
<2>设置段头和段尾
<3>表格的分割线
3.表格视图的搜索
<1>添加搜索条 UISearchBar–>tableHeaderView
4.表格视图控制器
cell的定制
1.我们使用MVC模式实现cell的定制。
什么是MVC模式
V是:VIew视图 作用:展示数据,接收用户交互
C是:Controller控制器
作用:负责把数据从Model中拿出来放到View上。
根据View的操作区修改数据。
M是:Model模型 作用:存储和表示数据
理解:简单理解为每个界面分为三层——Model,VIew,Controller
效果:让开发变得更简单,可维护性更强,可扩展性更强,可阅读性更强
下面我们就具体看一下MVC模式应该怎么设计,在MVC模式下如何定制cell
1.Model的设计
这里:你要建立数据模型,存储数据(数据模型:就是oc中的类)
现在获取的数据本质上是原始数据,
以后原始数据有很多中 plist JSON 数据库 文本文件
注意:不要直接使用原始数据
把所有的原始数据存储到数据模型Model
将解析数据存储到Model中
建立数组接收每个Model对象。
2.cell的定制
就是将cell上所有的空间全部封装成一个类。
在这个类里,我们创建这些控件,设置相应的坐标
将这些类添加到self.contentView