cell复用导致imageView重复显示的bug

上线前, 对APP进行了一番梳理, 发现cell的复用会导致cell(没有数据)上面的图片显示之前的有数据cell的img; 没有说明白吧, 看图

cell的重复显示导致问题.gif

试了网上之前说的好几种方法, 有的朋友是那种cell重用机制理解的有问题, 导致cell重复创建, cell上面的控件重复叠加, 网上大部分的解答都是这一种

解决cell上面控件重复叠加的bug, 一般是三种方法

方案一 通过不让他重用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.textLabel.text = @"text";

return cell;

}

方案二 同样通过不让他重用cell 来解决重复显示 不同的是每个cell对应一个标识

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

{

 定义cell标识  每个cell对应一个自己的标识

NSString *CellIdentifier = [NSString stringWithFormat:@"cell%ld%ld",indexPath.section,indexPath.row];

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// 判断为空进行初始化  --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)

if (!cell) {

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

}

cell.textLabel.text = @"text";

return 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.textLabel.text = @"text";

return cell;

}

一般重要的都在最后面, 哈哈哈...狗子你变了

自己写一个cell继承UITableViewCell,然后在自己写的cell里面用prepareForReuse来把cell中的ImageView初始化,比如清空图片神马的

下面贴代码

/**
 解决cell复用ImageView重复显示问题
 */
- (void)prepareForReuse {
    
    [super prepareForReuse];
    
    self.user_image1.image = nil;
    self.user_image2.image = nil;
    self.user_image3.image = nil;
    self.user_image4.image = nil;
    self.user_image5.image = nil;
    self.user_image6.image = nil;
    self.user_image7.image = nil;
    self.user_image8.image = nil;
  
}

哈哈哈, 有没有解决问题, 请点赞留言call我

PS: 日积月累, 天天进步
最近很焦虑, 上线的压力, 每天熬夜干项目, 过了一段没有爱的日子
还是要胸怀梦想...奋斗...
-END-

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,260评论 25 709
  • 我们在上一篇《通过代码自定义不等高cell》中学习了tableView的相关知识,本文将在上文的基础上,利用sto...
    啊世ka阅读 5,411评论 2 7
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • 1111
    我又没在玩阅读 1,501评论 0 0
  • 接本没课的间隙和宿舍两个人出来兼职,那两个人属于每天都要腻在一起的关系,每次弄得我觉得自己很尴尬,刚开始还会心血来...
    FoCusSSsSSoN阅读 1,059评论 0 1