2

これはおそらく以前に尋ねられたことがあると思いますが、デキューに問題があります。基本的に、私はある種のグリッドのセルに非同期画像の読み込みを使用しています。

つまり、基本的に、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*/
4

1 に答える 1

1

dequeは行を複製しませんが、メモリ使用量を最適化するために、以前は表示されなくなった行に対してインスタンス化されたセルの再利用をトリガーします。効果は、まさにあなたが複製として説明するものです。デキューされた後、再利用されたセルにサブビューを入力します。非同期画像を配列に格納し、行インデックスを使用してそれらを右側のセルに配置します。

于 2012-04-04T22:29:40.323 に答える