在我的应用程序中,我必须从json webservice获取图像并在表格视图中显示它们。向下滚动时,所有图像的顺序都是正确的,但是当我向后恢复时,所有图像都相互重叠。我正在使用[tableview reloaddata]然后它正在发生。
答案 0 :(得分:1)
在我的应用程序中发生了这种情况,我有一个排行榜表。这肯定是因为表被重用了。
解决此问题的最简单方法是先将单元格的图像设置为nil,然后下载并显示新图像。
肯定有其他方法可以做到这一点,但我绝对可以保证这个,因为我在我自己的应用程序中使用它,它的效果很棒!!
这是我如何解决问题。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * cellIdentifier = @"Cell";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
// Make sure you set the image for the cell to nil first
[cell.imageView setImage:nil];
// Then load your new image using the url and display it
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.imagedownloadqueue", NULL);
dispatch_async(backgroundQueue, ^(void){
NSUrl * url = [NSUrl UrlWithString:@"www.example.com"]; // Url of image to download
UIImage * image = [UIImage imageWithData:[NSData dataWithContentsOfUrl:url]];
if (image)
{
dispatch_async(dispatch_get_main_queue(), ^(void) {
[cell.imageView setImage:image]; // Display image after it is downloaded
});
}
});
return cell;
}