tableview 更新错误索引路径的单元格

Posted

技术标签:

【中文标题】tableview 更新错误索引路径的单元格【英文标题】:tableview update cells at wrong indexpath 【发布时间】:2017-03-01 08:40:53 【问题描述】:

我的 tableview 有问题。

我有一个音轨列表,如果该音轨确实存在,我会检查每个音轨。如果没有,我会在单元格图像视图中的艺术品上设置一个已删除的图像。

    //SET DELETED IMAGE IF TRACK NOT EXISTS
    if (!trackExists && cell.trackImageView.subviews.count < 1) 

       UIImageView *deletedImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 60, 60)];
       deletedImageView.image = [self resizeImageWithImage:[UIImage imageNamed:@"cellDeletedImage"] scaledToSize:CGSizeMake(60, 60)];
       [cell.trackImageView addSubview:deletedImageView];

    

有时当我重新加载 tableview 时,删除的图像在现有轨道上。我知道有更有效的方法可以做到这一点,但我尝试了又尝试,最终我来到了这里。

我也记录了这个方法,即使没有日志,它也会放置已删除的图像。

【问题讨论】:

【参考方案1】:

如果您按照设计使用表格视图,那么您可能会重复使用单元格。当您上下滚动表格几次时也会发生这种情况吗?如果再次滚动,是否有一个已删除图像的单元格突然没有了?

听起来重用的单元格仍然引用了那个已删除的图像。

不清楚您在哪里添加该图像视图,但我建议您将该代码移动到您的表格视图单元格的自定义类中(如果不存在,则创建一个)。随后在prepareForReuse中,确保图像视图被移除或隐藏。

@class TrackTableViewCell : UITableViewCell 

    - (void) prepareForReuse 
    
         //Remove / hide image view
    

    - (void) setAsDeleted 
    
        //Add / show image view
    
 

(原谅 Objective-c 的语法错误!我已经使用 Swift 有一段时间了。)

【讨论】:

以上是关于tableview 更新错误索引路径的单元格的主要内容,如果未能解决你的问题,请参考以下文章

自定义单元格的“没有重复使用表格单元格的索引路径”问题

tableview单元格索引路径的选择

如何从数据源填充 TableView 单元格?我目前收到错误

Swift 试图为同一索引路径出列多个单元格,这是不允许的

滚动时的 iOS TableView 索引值

致命错误:索引超出范围的两个自定义单元格