在UITableviewCell
之前的一瞬间,如果图片更新,则会显示重复使用的单元格的图片。有谁知道处理这个问题的最佳做法?
我尝试了以下内容(但可能实施了错误):
prepareForReuse
。我试图删除图片,但旧的图像仍然显示仍然闪烁(我可以重写代码并发布,如果有人认为我错过了,它应该有效)图像加载代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
UIImageView *pictureImageView = (UIImageView *)[cell viewWithTag:8];
//Using AFNetworking
[pictureImageView setImageWithURL:pictureURL];
return cell;
}
答案 0 :(得分:3)
解决方案不是在细胞出现时尝试更改图像,而是在细胞重新使用之前隐藏旧图像。有一种方法可以做到这一点:
-(void) tableView:(UITableView *)tableView didEndDisplayingCell:(BigPictureCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
UIImageView *pictureImageView = (UIImageView *)[cell viewWithTag:8];
pictureImageView.image = nil;
}
答案 1 :(得分:0)
我建议你替换这一行:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
这一个:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
和这一个:
pictureImageView.image = [UIImage imageWithColor:O_BACKGROUND_COLOR];
这一个:
pictureImageView.image = nil;
因为从颜色创建UIImage
所消耗的不仅仅是删除图像。
并且您不能尝试删除prepareForReuse
中的图像,因为在文档中明确指出不应该在此函数中执行布局操作。
修改强>
您的代码中存在错误:
UIImageView *pictureImageView = (UIImageView *)[cell viewWithTag:8];
这真的很奇怪,因为您之前声明了UITableViewCell
nil:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
因此,确实无法确保UITableViewCell
的{{1}}标记为8。
所以,如果不是这里,你应该有其他代码,它可以(当然必须)成为你问题的根源。