我有{{1>} 自定义单元格。自定义单元格包含UITableView
。图像是异步加载的。但是当滚动我的表格视图时,单元格中的图像会发生变化。这是我的代码:
UIView
请帮帮我。
答案 0 :(得分:4)
试试这个,
1:使用Array来缓存图像 NSMutablearray * imageicons;
2:下载数据后,将NULL值添加到数组中;
imageicons=[[NSMutableArray alloc] init];
for (int i=0; i<[self.appointments count]; i++)
{
[imageicons insertObject:[NSNull null] atIndex:i];
}
3:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row < [imageicons count] && [imageicons objectAtIndex:indexPath.row] != [NSNull null] )
{
[cell.bookimage setImage:[imageicons objectAtIndex:indexPath.row]];
NSLog(@"Array Hit");
}
else{
NSLog(@"Count of %i Size of %li Array and row number %i",[imageicons count],sizeof(imageicons),indexPath.row);
[NSThread detachNewThreadSelector:@selector(DownloadImageInBackground:) toTarget:self withObject:indexPath];
}
}
-(void)DownloadImageInBackground:(NSIndexPath *)path
{
MSAppointmentsModel *data = [self.appointments objectAtIndex:indexPath.row];
NSString *str=[data.cusDetails objectForKey:@"customer_image"];
imagetodisplay = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:str]]];
if (imagetodisplay==Nil)
{
// set deault image
[imageicons replaceObjectAtIndex:path.row withObject:[UIImage imageNamed:@"defaultimg.png"]];
}
else
{
MSAppointmentsCell *cell=(MSAppointmentsCell *)[self.booktableview cellForRowAtIndexPath:path];
[cell.bookimage setImage:imagetodisplay];
//NSLog(@"Count of %i Size of %li Array and row number %i",[imageicons count],sizeof(imageicons),path.row);
[imageicons replaceObjectAtIndex:path.row withObject:imagetodisplay];
}
}
答案 1 :(得分:0)
尝试在setNeedsDisplay
cell.empName.text = ...
来电
抱歉,我忽略了一些事情。更新。
答案 2 :(得分:0)
我认为medallionView会保留图像,因此存在一些问题。
您因为出列单元格而遇到错误,但不仅要设置custName,service和empName标签的文本,还要设置图像视图(medallionView)。所以基本上,它绘制(屏幕大小/单元高度)行数(例子9),填充这些单元格,然后不断重复使用它们,以及它在那里找到的图像。
另外,当我做异步请求时,我被告知永远不要在异步请求中绘制,而只是从URL获取所有图像并将它们存储在一个数组中,然后当所有内容都被加载时,1)通知tableView委托类重新加载数据或2)有一个委托方法,在加载数据后执行或3)有一个完成块,在每个图像加载后执行。