解决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. PostgreSQL(从版本9.3至11.2)任意命令执行漏洞 cve-2019-9193
  2. 机器学习基础——RandomForest
  3. C4C里产品主数据和销售组织数据维护的相互作用和相互影响
  4. db2 获取返回的游标_MySQL ------ 存储过程与游标简单使用
  5. sql管理:索引超出范围必须为非负值并小于集合大小_java面试基础知识-数据库基础知识(数据库索引部分)...
  6. Python实例讲解 -- wxpython 基本的控件 (文本)
  7. 捕获标志位_如何通过捕获标志挑战来提高网络安全技能-PicoCTF演练
  8. 开课吧:数据分析师常用的分析方法有哪些?
  9. 【渝粤教育】广东开放大学 java程序设计基础 形成性考核 (39)
  10. P1725 琪露诺 题解(单调队列)
  11. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
  12. ut红种状态解决办法汇总
  13. 面试必备 | 带你彻底搞懂 Python 生成器。
  14. 零基础CSS入门教程(17)–表格样式
  15. springMVC3.0后台验证信息不显示的原因初探
  16. 机械工程基础笔记整理
  17. 用计算机研究甲骨文,基于图像识别技术的甲骨文数据系统
  18. [电脑问题1]Microsoft Visual Basic运行时错误‘-2147221164’:没有注册类
  19. vue canvas 拖拽 放大缩小
  20. 正态分布的前世今生——如何发现的?

热门文章

  1. 从程序员到项目经理(17):你不是一个人在战斗--思维一换天地宽【转载】
  2. Dedecms之SQL语句修改和调用数据总结
  3. 深入浅出 Javascript API(二)--地图显示与基本操作
  4. ZOJ 3494 BCD Code(AC自动机 + 数位DP)题解
  5. zookeeper资料
  6. 初识liux简单命令
  7. springmvc结合json向后台传送数据(get、post)
  8. 三角形 JAVA 代码
  9. IE6和IE7的line-height和现代浏览器不一致的问题
  10. 编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器...