可重复使用的 TableViewCell 加载旧图像
Reusable TableViewCell loads an old image
我有一个可以用搜索框搜索的动态表格视图,如果我在后台单元格中加载图像并且搜索文本发生变化,单元格中的对象也可能会发生变化,有时在后台加载的旧图像将完成并在不应该显示的时候显示。并非每个图像都以相同的方式加载,但这是导致问题的方法:
[self.CarImage sd_setImageWithURL:imageURL
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageurl){
[self.CarImage setAlpha:0.0];
[UIImageView animateWithDuration:.5 animations:^{
[self.CarImage setAlpha:1.0];
}];
}];
如有任何想法,我们将不胜感激
你需要在这里做两件事
1)在prepareforresue方法中取消当前下载请求
2) 在 prepareforresue 方法中将图像设置为 nil
希望这能解决您的问题
这里的问题是,图像是在您已经重新使用单元格后从 url 加载的。您可以存储图像的 url,每次重复使用单元格时,图像的 url 都应存储在自定义单元格 class 中。然后在完成块中使用 NSURL
的 isEqual:
方法检查加载的图像 url 和存储的图像 url 是否相同。如果它们相同那么一切正常,单元格没有被重复使用,否则单元格被用于另一行,那么就不要设置图像。
self.carImgUrl = imageURL;//here carImgUrl is a property which you gonna set everytime when the cell is being reused.
[self.CarImage sd_setImageWithURL:imageURL
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageurl){
if([imageurl isEqual:self.carImgUrl])
{
[self.CarImage setAlpha:0.0];
[UIImageView animateWithDuration:.5 animations:^{
[self.CarImage setAlpha:1.0];
}];
}
}];
我有一个可以用搜索框搜索的动态表格视图,如果我在后台单元格中加载图像并且搜索文本发生变化,单元格中的对象也可能会发生变化,有时在后台加载的旧图像将完成并在不应该显示的时候显示。并非每个图像都以相同的方式加载,但这是导致问题的方法:
[self.CarImage sd_setImageWithURL:imageURL
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageurl){
[self.CarImage setAlpha:0.0];
[UIImageView animateWithDuration:.5 animations:^{
[self.CarImage setAlpha:1.0];
}];
}];
如有任何想法,我们将不胜感激
你需要在这里做两件事
1)在prepareforresue方法中取消当前下载请求
2) 在 prepareforresue 方法中将图像设置为 nil
希望这能解决您的问题
这里的问题是,图像是在您已经重新使用单元格后从 url 加载的。您可以存储图像的 url,每次重复使用单元格时,图像的 url 都应存储在自定义单元格 class 中。然后在完成块中使用 NSURL
的 isEqual:
方法检查加载的图像 url 和存储的图像 url 是否相同。如果它们相同那么一切正常,单元格没有被重复使用,否则单元格被用于另一行,那么就不要设置图像。
self.carImgUrl = imageURL;//here carImgUrl is a property which you gonna set everytime when the cell is being reused.
[self.CarImage sd_setImageWithURL:imageURL
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageurl){
if([imageurl isEqual:self.carImgUrl])
{
[self.CarImage setAlpha:0.0];
[UIImageView animateWithDuration:.5 animations:^{
[self.CarImage setAlpha:1.0];
}];
}
}];