2

我知道这可能已经被问过,但我遇到了出队问题。基本上,我在某种网格的单元格中使用异步图像加载。

所以本质上,我为一个相当简单的 3 列表添加了 left 、 middle 和 right 图像。我将行数设置为 15(总共大约 45 个单元格),并从数组中为每个行设置图像 url。

由于某种原因,前 16 个单元格在底部重复,当异步图像加载开始时,它们被正确的图像替换。如果我替换删除出队的东西,它会加载正常并且不会重复前 16 个块大约 3 次。

if (!cell) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
            cell.contentView.autoresizesSubviews = YES;
            cell.contentView.clipsToBounds = YES;
            cell.backgroundColor = [UIColor clearColor];

            Asynimage *leftImage;
            leftImage = [[Asynimage alloc] initWithFrame:CGRectMake(0,0,IMG_SIZE,IMG_SIZE)];

            leftImage.tag  = 10;
            [cell.contentView addSubview:leftImage];

            Asynimage *middleImage;
            middleImage = [[Asynimage alloc] initWithFrame:CGRectMake(IMG_SIZE,0,IMG_SIZE,IMG_SIZE)];
            middleImage.tag  = 20;

            [cell.contentView addSubview:middleImage];

            Asynimage *rightImage;
            rightImage = [[Asynimage alloc] initWithFrame:CGRectMake(IMG_SIZE*2,0,IMG_SIZE,IMG_SIZE)];
            rightImage.tag  = 30;

            [cell.contentView addSubview:rightImage];


        }



        Asynimage *leftImage=(Asynimage*)[cell.contentView viewWithTag:10];
        Asynimage *middleImage=(Asynimage*)[cell.contentView viewWithTag:20];
        Asynimage *rightImage=(Asynimage*)[cell.contentView viewWithTag:30];


        /*Set the urls on those 3 then do the loadimagefrom url*/
4

1 回答 1

1

双端队列不会复制行,但它会触发重用单元格,这些单元格之前已为不再可见的行实例化,以优化内存使用。效果正是您所描述的重复。使用子视图填充重复使用的单元格,在它们被出队后。将异步图像存储在一个数组中,并使用行索引将它们放在正确的单元格中。

于 2012-04-04T22:29:40.323 回答