常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复。

 1 // 这样配置的话超过页面显示的内容会重复出现
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义唯一标识
5 static NSString *CellIdentifier = @"Cell";
6 // 通过唯一标识创建cell实例
7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
8 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
9 if (!cell) {
10 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
11 }
12 // 对cell 进行简单地数据配置
13 cell.textLabel.text = @"text";
14 cell.detailTextLabel.text = @"text";
15 cell.imageView.image = [UIImage imageNamed:@"4.png"];
16
17 return cell;
18 }
通过以下3方案可以解决

方案一  取消cell的重用机制,通过indexPath来创建cell 将可以解决重复显示问题 不过这样做相对于大数据来说内存就比较吃紧了
 1 // 方案一  通过不让他重用cell 来解决重复显示
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义唯一标识
5 static NSString *CellIdentifier = @"Cell";
6 // 通过indexPath创建cell实例 每一个cell都是单独的
7 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
8 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
9 if (!cell) {
10 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
11 }
12 // 对cell 进行简单地数据配置
13 cell.textLabel.text = @"text";
14 cell.detailTextLabel.text = @"text";
15 cell.imageView.image = [UIImage imageNamed:@"4.png"];
16
17 return cell;
18 }

方案二  让每个cell都拥有一个对应的标识 这样做也会让cell无法重用 所以也就不会是重复显示了 显示内容比较多时内存占用也是比较多的和方案一类似

 1 // 方案二  同样通过不让他重用cell 来解决重复显示 不同的是每个cell对应一个标识
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义cell标识 每个cell对应一个自己的标识
5 NSString *CellIdentifier = [NSString stringWithFormat:@"cell%ld%ld",indexPath.section,indexPath.row];
6 // 通过不同标识创建cell实例
7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
8 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
9 if (!cell) {
10 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
11 }
12 // 对cell 进行简单地数据配置
13 cell.textLabel.text = @"text";
14 cell.detailTextLabel.text = @"text";
15 cell.imageView.image = [UIImage imageNamed:@"4.png"];
16
17 return cell;
18 }

方案三 只要最后一个显示的cell内容不为空,然后把它的子视图全部删除,等同于把这个cell单独出来了 然后跟新数据就可以解决重复显示

 1 // 方案三  当页面拉动需要显示新数据的时候,把最后一个cell进行删除 就有可以自定义cell 此方案即可避免重复显示,又重用了cell相对内存管理来说是最好的方案 前两者相对比较消耗内存
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义唯一标识
5 static NSString *CellIdentifier = @"Cell";
6 // 通过唯一标识创建cell实例
7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
8
9 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
10 if (!cell) {
11 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
12 }
13 else//当页面拉动的时候 当cell存在并且最后一个存在 把它进行删除就出来一个独特的cell我们在进行数据配置即可避免
14 {
15 while ([cell.contentView.subviews lastObject] != nil) {
16 [(UIView *)[cell.contentView.subviews lastObject] removeFromSuperview];
17 }
18 }
19 // 对cell 进行简单地数据配置
20 cell.textLabel.text = @"text";
21 cell.detailTextLabel.text = @"text";
22 cell.imageView.image = [UIImage imageNamed:@"4.png"];
23
24 return cell;
25 }

IOS之TableViewCell重用机制避免重复显示问题的更多相关文章

  1. iOS开发之--TableViewCell重用机制避免重复显示问题

    常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复 // 这样配置的话超过页面显示的内容会重复出现 - (UITableViewCell *)tableView:(U ...

  2. 52.tableViewCell重用机制避免重复显示问题

    表刷新超出页面显示的内容会重复出现 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSInd ...

  3. ios之TableViewCell重用机制避免反复显示问题

    常规配置例如以下 当超过tableView显示的范围的时候 后面显示的内容将会和前面反复 // 这样配置的话超过页面显示的内容会反复出现 - (UITableViewCell *)tableView: ...

  4. IOS之TableViewCell重用机制解决上下刷新重复显示

    首先我是一个经验浅薄的iOS开发人员,这个问题想必许多初学者经常遇到这些问题,在面试中也会经常问到.现在我们一一解决. 首先我们要知道TableViewCell重用机制的原理是什么,我们抽象的理解为古 ...

  5. IOS开发—UITableView重用机制的了解

    引言 对于一个UITableView而言,可能需要显示成百上千个Cell,如果每个cell都单独创建的话,会消耗很大的内存.为了避免这种情况,重用机制就诞生了. 假设某个UITableView有100 ...

  6. ios UITableView中Cell重用机制导致内容重复解决方法

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

  7. iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱

      UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...

  8. iOS基础篇(十三)——UITableView(一)重用机制

    UITableView是app开发中常用到的控件,功能很强大,常用于数据的显示.在学习UITableView使用之前,我们先简单了解一下: 1.UITableView的重用机制 UITableView ...

  9. IOS中UITableViewCell的重用机制原理

    创建UITableViewController子类的实例后,IDE生成的代码中有如下段落: - (UITableViewCell *)tableView:(UITableView *)tableVie ...

随机推荐

  1. python之函数用法round()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法round() #http://www.cnblogs.com/hongfei/p/3 ...

  2. xml 及其语法

    先说一些关于框架,开发中的框架,主要是用反射技术来封装数据. 先指定规范写出xml,然后通过读写流技术封装好一些API用来映射xml文件,方便取得xml中的配置信息.取得xml内容就可以通过取得的内容 ...

  3. HDUOJ ---悼念512汶川大地震遇难同胞——来生一起走

    悼念512汶川大地震遇难同胞——来生一起走 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. 如何在Access2007中使用日期类型查询数据

    select * from 表 where datediff("d",日期型的字段,#2008-09-01#)=0或select * from 表 where 日期型的字段 > ...

  5. TextBoxes 与 TextBoxes ++

    TextBoxes 论文关键idea 本文和SegLink一样,也是在SSD的基础上进行改进的.相比SSD做了以下的改进: 修改了default box的apect ratio,分别为[1 2 3 5 ...

  6. DevExpress下拉多选框 CheckComboboxEdit、CheckedListBoxControl

    CheckComboboxEdit //清空项            checkedComboBoxEdit1.Properties.Items.Clear(); //自定义数组            ...

  7. Sunisoft.IrisSkin.SkinEngine 设置winform皮肤

    Sunisoft.IrisSkin.SkinEngine se; se = new Sunisoft.IrisSkin.SkinEngine { SkinAllForm = true, SkinFil ...

  8. @RequestBody 处理类型 和 对象 和 json 相互转换

    1 @RequestBody 处理类型 在项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用? 一般使用表单提交数据时不需要使用@RequestBody 即可自 ...

  9. DOA——MUSIC算法

    一.均匀圆阵(UCA, Uniform Circular Array)的MUSIC算法 假设一个半径为R的M元均匀圆阵的所有阵元均位于坐标系X-Y平面内,第k-1个阵元坐标为,第i个窄带信号波长为,来 ...

  10. java的IO总结(一)

    Java的IO流是实现输入输出的基础,这里所说的流就是数据流,大部分的与流相关的类放在Java.io包下. 一,Java的流分类 按照不同的分类方式可以把流分成不同的类型,下面我们从不同的角度对流进行 ...