常规配置如下 当超过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. java Socket Tcp 浏览器和服务器(二)

    package cn.itcast.net.p2.ie_server; import java.io.IOException;import java.io.InputStream;import jav ...

  2. 让MyEclipse支持mac的Retina屏解决字体模糊的问题

    最近在使用MyEclipse时最让我头疼的问题就是MyEclipse并不能很好的支持苹果的Retina屏幕,看着字体会非常模糊,那叫一个心酸,真白瞎了这块好屏幕.(不知道最新的版本有没有支持,反正我的 ...

  3. 【转载】@RequestMapping的分类

    @RequestMapping的分类 类级别的和方法级别的@RequestMapping的几种形式: @RequestMapping(method = RequestMethod.GET)  @Req ...

  4. HDUOJ---kiki's game

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/1000 K (Java/Others)Total ...

  5. 方法$.data()和$.('#test').on()的使用

    1.on() 方法的使用 在选择元素上绑定一个或多个事件的事件处理函数. on()方法绑定事件处理程序到当前选定的jQuery对象中的元素.在jQuery 1.7中,.on()方法 提供绑定事件处理程 ...

  6. HDFS权限管理用户指南

    原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html 概述 用户身份 理解系统的实现 文件系统API变更 S ...

  7. Android 加新的页面

    工程右键->New->Other->Android Activity

  8. laravel中间件简单使用

    laravel内置了一个中间件来验证用户是否经过认证,如果用户没有经过认证,中间件会将用户重定向到登录页面,否则如果用户经过认证,中间件就会允许请求继续往前进入下一步操作. 当然,除了认证之外,中间件 ...

  9. 删除计算机里设备和驱动器中的爱奇艺、PPS、百度云、360云盘图标

    转自:http://jingyan.baidu.com/article/86f4a73e59bb3037d6526936.html 点击"开始"找到"运行" 输 ...

  10. Java反射机制在Spring IOC中的应用

    反射的定义: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取它所有的成员变量和方法并且显示出来. 反射机制的 ...