如何从 PrepareForReuse 的 UITableView 自定义行中删除视图?

Posted

技术标签:

【中文标题】如何从 PrepareForReuse 的 UITableView 自定义行中删除视图?【英文标题】:How to remove Views from UITableView custom row on PrepareForReuse? 【发布时间】:2014-08-29 12:43:48 【问题描述】:

我有一个 UITable 视图,每行中都有随机数的 UIImageView。在单行的构造中,我使用[self addSubView: xxx]for 循环来添加我需要添加的每个UIImageView(我的模型有一个URL 数组)。但现在我注意到,当 UITableView 重用行并且它不清理添加的 UIImageViews 时。 我已经绑定到在方法 onPrepareForReuse 中手动删除它们,如代码中所示:

 if(_messageContentsFrames != nil)
    for(NVChatMessageContent *singleContent in _messageContentsFrames)
        [singleContent removeFromSuperview];
    

但这给了我错误。当要重用视图时,如何完全重置视图?

【问题讨论】:

【参考方案1】:

您可以在 -tableView:cellForRowAtIndexPath: 方法中删除这些图像视图。这一直对我有用。 顺便说一句,如果你用它来做这样的工作,你真的需要重用单元格吗?创建新单元格不是更容易吗? 或者最好不要删除 imageViews,而是在重用时重新配置它们并删除那些不需要该单元格的视图。

【讨论】:

已经试过了。它给了我一个例外,它找不到选择器的实例来删除视图。如果我先重新创建行,它会起作用。是不是太错了,或者我可以重复使用它?【参考方案2】:

选项 1. 将标签设置为 UIImageView(使用:imageView.tag = 123456),然后在 tableView:cellForRowAtIndexPath: 中使用:

id imageView = [self.view viewWithTag:yourInteger];
[imageView removeFromSuperview];

选项 2。 使用:

for( UIView *view in cell.subviews) 
    if ([view isKindOfClass:[UIImageView class]]) 
        [view removeFromSuperView];
     

【讨论】:

以上是关于如何从 PrepareForReuse 的 UITableView 自定义行中删除视图?的主要内容,如果未能解决你的问题,请参考以下文章

使用 prepareForReuse 函数从 UITableCell 类中的 ViewController 重置 var

tableView/collectionView复用prepareForReuse

如何停止使用渐变 UICollectionCell 创建新图层?覆盖 func prepareForReuse()

UITableViewCell的prepareForReuse方法

iOS 杂笔-如何解决tableview显示错乱问题

自定义 UITableViewCells 和正确使用 prepareForReuse 和 removeFromSuperview