【发布时间】:2012-08-31 05:29:32
【问题描述】:
我正在tableView:cellForRowAtIndexPath 中尝试通过调用来设置图像
[self downloadImage:urlString andSetIntoCellImageView:cell]
在downloadImage 中,它会调用NSURLConnection:sendAsynchronousRequest(仅限iOS 5 及更高版本),并在完成块中,使用设置图像
cell.imageView.image = [UIImage imageWithData:data]; // data is downloaded data
如果在tableView:cellForRowAtIndexPath 中,imageView 填充了一个虚拟占位符图像,它就可以工作——我想知道新图像是如何刷新的,是 setNeedsDisplay 重新绘制吗?但是如果我不设置占位符图像,那么新图像根本不会显示。我想知道有什么机制可以让它显示图像?
如果我使用
[cell.imageView setNeedsDisplay]
或
[cell setNeedsDisplay];
在完成块中,它不起作用,如果我使用
[self.table reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
在完成块中通过使downloadImage接受indexPath,它将再次调用tableView:cellForRowAtIndexPath,并导致无限循环。所以看来我需要使用一些哈希表来记住图像是否已经在哈希表中:如果没有,请调用downloadImage,如果在哈希表中,只需使用它,这样就不会无限循环。
但是有没有一种简单的方法可以让图片显示出来?设置占位符图像有效,但如果我们不这样做 - 占位符通过什么机制导致图像刷新?
【问题讨论】:
-
所以
cell.imageView.image = [UIImage imageWithData:data]只要在tableView:cellForRowAtIndexPath:方法中的单元格中设置了占位符图像就可以工作,但是如果您不提供占位符,那么同样的技术不起作用吗?您介意发布您是如何设置占位符图像的吗? -
@CarlVeazey 这是正确的。当然,我使用
cell.imageView.image = [UIImage imageNamed:@"pic0.png"];设置了占位符
标签: iphone ios uitableview sendasynchronousrequest