带图像的表格视图单元格

问题描述:

我有一个带有两个图像视图的表格视图单元格,一个图像视图是一个占位符,另一个图像的顶部是我从文档目录加载的实际图像。当表格视图重新使用单元格时,我遇到图片被错误显示的问题。带图像的表格视图单元格

我在单元类中使用下面的方法解决了我的问题,但是我已经读过这可能会导致性能问题,任何有关更好解决方案的想法?

- (void)prepareForReuse 
{ 
    [[self imageView] setImage:nil]; 
} 
+0

你好,你可以在这里上传整个代码。那么我可能会帮助你.. – 2013-05-11 16:04:06

+1

你在哪里读到的? – Wain 2013-05-11 16:05:59

+1

这是整个代码,它只是清除图像视图。 – Vikings 2013-05-11 16:06:51

第一个总之,你不会像你应该那样打电话给[super prepareForReuse]

而且文档非常清晰,您应该在tableView:cellForRowAtIndexPath:中设置图像,因为它的内容。
如果您在tableView:cellForRowAtIndexPath:中设置图像,则无法在prepareForReuse中将其设置为零。

想象下面的流程。

  1. 向下滚动,单元格0放到队列中。
  2. prepareForReuse套imageView.image为零
  3. tableView:cellForRowAtIndexPath:队列中取出细胞,并设置imageView.image到图像1

要设置imageView.image两次。

如果您使用零,则可能根本没有可衡量的性能影响。但是您可能会想出实际设置placeHolder图像的方法。因此,单元格已排队并准备好重用,您可以设置占位符图像;稍后,该单元格将被取出,并且占位符图像在占位符图像甚至可见之前被替换为真实图像。

我会完全删除prepareForReuse方法。你不需要它,如果你在tableView:cellForRowAtIndexPath:


documentation设置图像:

如果一个UITableViewCell对象是可重复使用的,也就是说,它有一个复用标识符调用此方法就在从UITableView方法dequeueReusableCellWithIdentifier返回对象之前。出于性能方面的原因,您应该只重置与内容无关的单元格属性,例如alpha,编辑和选择状态。 tableView:cellForRowAtIndexPath:中的表视图委托应该在重用单元时始终重置所有内容。如果单元对象没有关联的重用标识符,则不调用此方法。如果您重写此方法,则必须确保调用超类实现。

+0

_“..你应该只重置与内容无关的单元格的属性...... “_ _内容是什么意思?我应该在'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; 
} 
+0

I 'm已经使用NSCache,只是想确保我没有做一些会导致性能问题的东西 – Vikings 2013-05-11 16:21:59

+0

然后,没问题:) – 2013-05-11 16:23:00