1

各セルにタイトルと画像を含む UITableView があります。一部のセルにはデフォルトの画像があり、他のセルにはありません。テーブルをスクロールすると、一部の行の画像が予期したものではなく、別の行の画像が予期したものではなく表示されます。dequeuereuseidentifier を使用しない場合はすべて正常に機能しますが、セルがたくさんあるので使用したいと思います。

なにか提案を?

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];

    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];

        CGRect titleRect = CGRectMake(60, 6, 200, 24);
        UILabel *title = [[UILabel alloc] initWithFrame: titleRect];
        title.tag = 1;
        title.backgroundColor = [UIColor clearColor];
        title.font = [UIFont fontWithName:@"AdelleBasic-Bold" size:15.5];
        [cell.contentView addSubview:title];

        UIImageView *defaultCellImage = [[UIImageView alloc] initWithFrame:CGRectMake(8, 10, 42, 42)];
        defaultCellImage.tag = 2;
        [defaultCellImage setImage:[UIImage imageNamed: @"Default_Row_Image"]];
        [cell.contentView addSubview:defaultCellImage];
    }

    NSUInteger row = [indexPath row];
    Movie *movie = [_movies objectAtIndex: row];

    UILabel *titleRowLabel = (UILabel *) [cell.contentView viewWithTag:1];
    titleRowLabel.text = [movie title];

    UIImageView *cellImage = (UIImageView *) [cell.contentView viewWithTag:2];
    if (![movie.imageName isEqualToString:@""])
        [cellImage setImage:[UIImage imageNamed: [movie imageName]]];

    return cell;
}
4

1 に答える 1

2

テーブル ビューで使用される最初のセルが適切に読み込まれます。デキューするセルがないため、if (cell == nil)が返さYESれ、セルの画像がデフォルトに設定されます。その後、メソッドの後半で別の画像を設定する条件が満たされると、別の画像が表示されます。ここまでは順調ですね。

ただし、再利用可能なセルがキューから取り出されると、すでに画像セットが含まれているため、デフォルトではない可能性があります。cell == nilが を返すようになったため、NOこのセルの画像がデフォルトの画像にリセットされることはありません。たとえそれが表示されるべき画像であってもです。

于 2012-08-03T16:52:00.710 に答える