jjzjj

iphone - UITableview dequeueReusableCellWithIdentifier 重复行

coder 2024-01-27 原文

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

所以基本上,我为 3 列表添加了左、中和右图像,这非常简单。我将行数设置为 15(总共大约 45 个单元格)并从数组中为每个单元格设置图像 url。

出于某种原因,前 16 个单元格在底部重复,当异步图像加载开始时,它们被正确的图像替换。如果我更换删除出队的东西,它所有加载正常并且它不会重复前 16 个 block 大约 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*/

最佳答案

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

关于iphone - UITableview dequeueReusableCellWithIdentifier 重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10020062/

有关iphone - UITableview dequeueReusableCellWithIdentifier 重复行的更多相关文章

随机推荐