带图像的表格视图单元格
我有一个带有两个图像视图的表格视图单元格,一个图像视图是一个占位符,另一个图像的顶部是我从文档目录加载的实际图像。当表格视图重新使用单元格时,我遇到图片被错误显示的问题。带图像的表格视图单元格
我在单元类中使用下面的方法解决了我的问题,但是我已经读过这可能会导致性能问题,任何有关更好解决方案的想法?
- (void)prepareForReuse
{
[[self imageView] setImage:nil];
}
第一个总之,你不会像你应该那样打电话给[super prepareForReuse]
。
而且文档非常清晰,您应该在tableView:cellForRowAtIndexPath:
中设置图像,因为它的内容。
如果您在tableView:cellForRowAtIndexPath:
中设置图像,则无法在prepareForReuse
中将其设置为零。
想象下面的流程。
- 向下滚动,单元格0放到队列中。
-
prepareForReuse
套imageView.image为零 -
tableView:cellForRowAtIndexPath:
队列中取出细胞,并设置imageView.image到图像1
要设置imageView.image两次。
如果您使用零,则可能根本没有可衡量的性能影响。但是您可能会想出实际设置placeHolder图像的方法。因此,单元格已排队并准备好重用,您可以设置占位符图像;稍后,该单元格将被取出,并且占位符图像在占位符图像甚至可见之前被替换为真实图像。
我会完全删除prepareForReuse
方法。你不需要它,如果你在tableView:cellForRowAtIndexPath:
从documentation设置图像:
如果一个UITableViewCell对象是可重复使用的,也就是说,它有一个复用标识符调用此方法就在从UITableView方法dequeueReusableCellWithIdentifier返回对象之前。出于性能方面的原因,您应该只重置与内容无关的单元格属性,例如alpha,编辑和选择状态。 tableView:cellForRowAtIndexPath:中的表视图委托应该在重用单元时始终重置所有内容。如果单元对象没有关联的重用标识符,则不调用此方法。如果您重写此方法,则必须确保调用超类实现。
_“..你应该只重置与内容无关的单元格的属性...... “_ _内容是什么意思?我应该在'prepareForReuse'还是'tableView:cellForRowAtIndexPath:'中更改单元格的标签文本?我应该在哪里设置,例如,某些单元格视图的'hidden'属性? – 2015-12-17 07:58:11
既然你有这样的图像视图后面的占位符图像,有没有错,如果你顶的ImageView图像设为零。
为了提高图像生成处理中,可以使用一个NSCache对象像这样,
1)
@property(nonatomic, strong) NSCache *imageCache;
2)呼叫内的tableView的cellForRowAtIndexPath此方法:方法,所述图像生成过程可以搬进去,
-(UIImage *) imageForIndexPathRow:(int) row{
id image = [self.imageCache objectForKey:[NSNumber numberWithInt:row]];
if(!image){//if the image is not in the cache,
UIImage *newImage; //create image here
[self.imageCache setObject:newImage forKey:[NSNumber numberWithInt:row]];
return newImage;
}
return (UIImage *) image;
}
I 'm已经使用NSCache,只是想确保我没有做一些会导致性能问题的东西 – Vikings 2013-05-11 16:21:59
然后,没问题:) – 2013-05-11 16:23:00
你好,你可以在这里上传整个代码。那么我可能会帮助你.. – 2013-05-11 16:04:06
你在哪里读到的? – Wain 2013-05-11 16:05:59
这是整个代码,它只是清除图像视图。 – Vikings 2013-05-11 16:06:51