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

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

通过如下三个方案可以解决:

方案一  取消cell的重用机制,通过indexPath来创建cell 将可以解决重复显示问题 不过这样做相对于大数据来说内存就比较吃紧了

// 方案一  通过不让他重用cell 来解决重复显示
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{// 定义唯一标识static NSString *CellIdentifier = @"Cell";// 通过indexPath创建cell实例 每一个cell都是单独的UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];// 判断为空进行初始化  --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)if (!cell) {cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];}// 对cell 进行简单地数据配置cell.textLabel.text = @"text";cell.detailTextLabel.text = @"text";cell.imageView.image = [UIImage imageNamed:@"4.png"];return cell;
}

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

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

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

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

以上方法是通过自己整理,搜集出来的,有用的几个方法,希望能帮到大家,如果有什么理解不对的地方,希望大家指出!希望能帮到大家!

转载于:https://www.cnblogs.com/hero11223/p/6041687.html

iOS开发之--TableViewCell重用机制避免重复显示问题相关推荐

  1. iOS tableviewcell重用机制避免重复显示

    tableviewcell常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复 一般避免重复显示有3种做法: 1.去掉cell的重用机制 2.让每个cell都拥有一个对 ...

  2. IOS之TableViewCell重用机制避免重复显示问题

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

  3. iOS开发-自己定义重用机制给ScrollerView加入子视图

    iOS开发-自己定义重用机制给ScrollerView加入子视图 事实上这个问题我非常早就想过,仅仅是没有通过去写程序实现,昨天有人提起,我就巧了一下 不知道大家打印郭tableview:cellfo ...

  4. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  5. iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)

    layout: post #iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) title: iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件) #时间配置 d ...

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

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

  7. iOS开发之沙盒机制(SandBox)

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  8. iOS 开发之沙盒机制 文件操作 (NSFielManager)

    原文链接:http://www.jianshu.com/p/349855b5a8ae iOS APP 可以在自己的沙盒里读写文件,但是,不可以访问其他 APP 的沙盒.每一个 APP 都是一个信息孤岛 ...

  9. IOS开发-通知与消息机制

    在多数移动应用中不论什么时候都仅仅能有一个应用程序处于活跃状态.假设其它应用此刻发生了一些用户感兴趣的那么通过通知机制就能够告诉用户此时发生的事情. iOS中通知机制又叫消息机制,其包含两类:一类是本 ...

最新文章

  1. opencv分别使用指针和LUT函数对BGR图像像素进行反转处理
  2. 百度 和 AI教父Hinton 的故事
  3. js判断是由含有a节点_如何在 JS 中判断数组是否包含指定的元素(多种方法)
  4. HTML(格式,文本标签)
  5. 【模板/经典题型】FWT
  6. 【Go API 开发实战 3】API 流程和代码结构
  7. 在VS2010 Choose Toolbox Item Dialog 中显示自定义控件
  8. 2018顺丰视觉岗笔试几个知识点
  9. UVA10023 Square root【大数】
  10. 190715每日一句
  11. tomcat设置独立jvm的例子
  12. 动软代码生成器生成数据库文档 (转载)
  13. 开源开放 | OpenKG发布第二批并更新近十个新冠知识图谱开放数据集
  14. Matlab中对坐标轴的对数转化,loglog,semilogx与semilogy
  15. 苹果公司开发者账号申请——Apple Developer Program
  16. 数据结构——数组以及n维数组
  17. 《计算机应用基础》课程计划,计算机应用基础课程教学计划
  18. CISCO2600路由器入门3
  19. 头晕和眩晕是怎样的感觉?3件小事来缓解!
  20. 前端面试之计算机网络篇

热门文章

  1. Redhat 中裸设备(raw) 的配置和oracle中使用
  2. 博威特瞄准数据备份市场
  3. Excel事半功倍的应用
  4. python怎么使用int四舍五入_python中如何取整数
  5. linux给用户写任务计划,linux——计划任务
  6. XML DOM – 访问节点概述
  7. 单片机为什么不到一年时间涨这么多?
  8. 单片机开发项目全局变量太多怎么管理?
  9. 机械转行的都干啥去了?机械转行计算机难吗?
  10. 【C语言】一文搞定 “文件操作”