UITableview dequeueReusableCellWithIdentifier重复行

时间:2012-04-04 22:17:43

标签: iphone ios uitableview asynchronous

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

基本上,我为3列表添加了左,中,右图像,这非常简单。我将行数设置为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*/

1 个答案:

答案 0 :(得分:1)

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