解决Cell重用问题

在显示的过程中,出现了内容重叠的问题,其实就是UITableViewCell重用机制的问题。

解决方法一:对在cell中添加的控件设置tag的方法

在cell的contentView上需要添加控件,那么就可以对添加的控件设置tag,然后新建cell的时候先remove前一个cell tag相同的控件,再添加新的label,这样就不会出现cell内容的重叠。例如添加标签label

[[cell viewWithTag:100] removeFromSuperview];
[[cell contentView] addSubview:contentLabel];
解决方法二:删除cell中的所有子视图

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

}

NSArray *subviews = cell.contentView.subviews;

for (UIView *subview in subviews) {

[subview removeFromSuperview];

}

以上只是列举了方法实现的位置,并没有将所有代码写出来。上面的实现方法是将cell.contentView上面的子视图全部取出来,把它们一一移除,这是解决问题的一种方法, 如果子视图过多的话,每次重用的时候都会一一把子视图移除会在程序的执行效率上产生问题。
        
        解决方法三: 通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决
        重用机制是根据相同的标识符来重用cell的,标识符不同的cell不能彼此重用。于是我们将每个cell的标识符都设置为不同,就可以避免cell重用问题了。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSString *identifier = [NSString stringWithFormat:@"%d",[indexPath row]];//以[indexPath row]来唯一确定cell
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        //创建cell
        cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

posted on 2014-12-17 17:37 苹果ios开发者 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/z-j-w/p/4169958.html

解决Cell重用问题相关推荐

  1. UITableViewCell中cell重用机制导致内容重复的方法

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

  2. UITableViewCell在非Nib及Cell重用下设置CellStyle

    在UITableViewController(实现了UITableViewDataSource)下需要实现 - (UITableViewCell *)tableView:(UITableView *) ...

  3. runloop解决Cell上主线程卡顿

    1解决cell上的主线程加载卡顿问题 通过添加runloop 观察者,卡顿等待的时候进行处理 视频地址 v.youku.com/v_show/id_X- RunLoopMode 5 种mode 使用 ...

  4. UI基础(四)之tableView (cell重用、原型cell、静态cell)/xib注意事项

    ---恢复内容开始--- 1.Cell的重用机制: 如下图所示:我们在写tableview的数据源方法的时候,在第三个方法中通常会碰到定义重用cell的三步骤 #pragma mark -- 数据源方 ...

  5. iOS cell重用机制导致数据重叠显示解决方法

    当页面拉动需要显示新数据的时候,把最后一个cell进行删除 就有可以自定义cell 此方案即可避免重复显示. <span style="font-family:Microsoft Ya ...

  6. cell重用的几种方式

    1.使用xib重用 //ios6 之后推荐大家使用的重用方式 //动态的使用self获得当前类名,来作为唯一的标示 NSString * identifier = NSStringFromClass( ...

  7. UI:UITableView 编辑、cell重用机制

    tableView编辑.tableView移动.UITableViewController tableView的编辑:cell的添加.删除. 使⽤场景: 删除⼀个下载好的视频,删除联系⼈: 插⼊⼀条新 ...

  8. 解决cell循环利用造成的重复勾选

    @interface ProfessionViewController (){NSMutableArray *_professionArray;//cell模型数组NSMutableArray *_s ...

  9. iOS面试必看,最全梳理

    序言 目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态 ...

  10. iOS面试题-(三)

    目前形势,参加到iOS队伍的人是越来越多,甚至已经到供过于求了.今年,找过工作人可能会更深刻地体会到今年的就业形势不容乐观,加之,培训机构一火车地向用人单位输送iOS开发人员,打破了生态圈的动态平衡. ...

最新文章

  1. 微生物组助手——最易学的扩增子、宏基因组分析流程
  2. Column store index 列数据如何匹配成行数据?
  3. Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别
  4. net 控制台 定时_.NET Core实现基于Quart.Net的任务管理
  5. cygwin This indicates that the /etc/passwd (and possibly /etc/group) files should be rebuilt 问题解决办法
  6. Spring Resource接口获取资源
  7. windows7系统损坏修复_windows系统启动不了,怎么办?一招轻松搞定!
  8. 设计模式17_命令模式
  9. Android 最火高速开发框架AndroidAnnotations使用具体解释
  10. unantu下的tmp文件夹_纯干货:Linux各文件夹结构说明及用途介绍
  11. java jsession,JSession
  12. linux 两台linux服务器想共享一个磁盘分区
  13. PL / SQL教程
  14. 浅谈csdn写博客几年来的感受———已结题
  15. 【Qt+OpenCV配置简介】
  16. linux 平台编程软件下载,慧编程-慧编程linux版下载 v1.2.0官方版--pc6下载站
  17. Mari 仿制图章 Clone Stamp的使用
  18. 供应链金融(Supply Chain Finance)
  19. ipad MOV转mp4
  20. 有时候,感慨的人生~

热门文章

  1. PC建立WIFI热点
  2. Android开发工程师,前行路上的14项技能
  3. 【Android】proguard混淆代码
  4. VB.NET的数据库基础编程[zz]
  5. iOS - 个人项目流程(建立项目和提交Git 进行代码迭代管理)
  6. 企业治理的要诀(学习总结)
  7. jquery中的ajax方法参数
  8. 搭建MHA时 yum 安装perl模块提示 baseurl 错误
  9. easyui中datagrid空数据集不刷新的解决方式
  10. button与submit