滚动时更改UITableView图像

时间:2013-07-25 11:53:40

标签: ios uitableview

我有{{1>} 自定义单元格。自定义单元格包含UITableView。图像是异步加载的。但是当滚动我的表格视图时,单元格中的图像会发生变化。这是我的代码:

UIView

请帮帮我。

3 个答案:

答案 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

之后在imageView上添加cell.empName.text = ...来电

抱歉,我忽略了一些事情。更新。

答案 2 :(得分:0)

我认为medallionView会保留图像,因此存在一些问题。

您因为出列单元格而遇到错误,但不仅要设置custName,service和empName标签的文本,还要设置图像视图(medallionView)。所以基本上,它绘制(屏幕大小/单元高度)行数(例子9),填充这些单元格,然后不断重复使用它们,以及它在那里找到的图像。

另外,当我做异步请求时,我被告知永远不要在异步请求中绘制,而只是从URL获取所有图像并将它们存储在一个数组中,然后当所有内容都被加载时,1)通知tableView委托类重新加载数据或2)有一个委托方法,在加载数据后执行或3)有一个完成块,在每个图像加载后执行。