2

編集:実際には画像は正常に表示されます。スクロールすると、画像が混同されます...

UITableに配置している画像へのリンクを含むXMLファイルを解析しています。どういうわけか、写真は完全に混同されており、テーブルを下にスクロールすると、それらのいくつかは変化し始めます!UITableに使用しているコードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";
    Tweet *currentTweet = [[xmlParser tweets] objectAtIndex:indexPath.row];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

        CGRect imageFrame = CGRectMake(2, 8, 40, 40);
        customImage = [[UIImageView alloc] initWithFrame:imageFrame];
        [cell.contentView addSubview:customImage];

    }

    NSString *picURL = [currentTweet pic];
    if (![picURL hasPrefix:@"http:"]) {
        picURL = [@"http:" stringByAppendingString:picURL];
    }

    customImage.image = [UIImage imageWithData:[NSData dataWithContentsOfURL: [NSURL URLWithString:picURL]]];

    return cell;
}

私が間違っていることについて何か考えはありますか?どんな助けでも真剣に感謝します。どうも!

4

3 に答える 3

3

問題は、セルがそうでない場合nil(つまり、画面からスクロールアウトしたセルを正常に再利用した場合)、customImageポインターを適切に設定していないことです(これはクラスインスタンス変数であるため、最後の値からの値を持ちます)。作成したセル)。したがって、ゼロ以外の定数を定義してから、ステートメントをkCustomImageTag次のように変更します。ifcellForRowAtIndexPath

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    CGRect imageFrame = CGRectMake(2, 8, 40, 40);
    customImage = [[UIImageView alloc] initWithFrame:imageFrame];
    [cell.contentView addSubview:customImage];
    customImage.tag = kCustomImageTag;
}
else
{
    customImage = [cell.contentView viewWithTag:kCustomImageTag];
}

tag作成時に設定し、customImageそれを使用して、再利用されtagたに存在するものを取得します。customImageUITableViewCell

于 2013-01-21T14:48:39.083 に答える
0

再利用可能なセルを要求するときに、それがnilでない場合は、既に割り当ててそのcontentViewにサブビューを追加したセルです...最初にcellForRowですべてのサブビューを削除する必要があります。

if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    CGRect imageFrame = CGRectMake(2, 8, 40, 40);
    customImage = [[UIImageView alloc] initWithFrame:imageFrame];
    [cell.contentView addSubview:customImage];

}  else {
     for (UIView *v in cell.contentView)
          [v removeFromSuperView];
}
于 2013-01-21T14:11:37.707 に答える
0

このプロジェクトをご覧ください:https ://github.com/bharris47/LIFOOperationQueue

を使用してバックグラウンドで画像を読み込む方法を示していますNSTable。さらに、画像をミックスマッチさせない方法についてはかなり良いはずです。

于 2013-01-21T14:14:40.633 に答える