0

セル内に画像を読み込もうとしています。セル内に画像をロードすることはできますが、tableViewを上下にスクロールすると、画像は他の異なるセル内にもランダムに表示されます...

ここにいくつかのコードがあります:

- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";


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

    cell.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.textColor = [UIColor whiteColor];


}

if (indexPath.section == ONE_SECTION) {

    switch(indexPath.row) {

        case 0:{
            //some code
}
                break;
            case 2:{
                              //some code

}
                break;
            case 3:{


            UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(256,0,43,43)];
            imageView.contentMode = UIViewContentModeScaleAspectFit;
            [cell.contentView addSubview:imageView];
            imageView.layer.cornerRadius = 10.0;
            //imageView.contentMode = UIViewContentModeScaleAspectFit;
            imageView.layer.masksToBounds = YES;
            imageView.image = [UIImage imageNamed:@"imageName.png"];}
            break;
        default:
            break;
    }

}

if (indexPath.section == TWO_SECTION) {
    //some code
}

if (indexPath.section == THREE_SECTION) {
    //some code
}


return cell;
}

ありがとうございました

4

2 に答える 2

0

キャッシュされたセルを使用しているため、指定されたセルは、コードへの前回の呼び出しで画像ビューを追加したセルである可能性があります。画像ビューに一意を割り当てると、それが不要なtag場合は、その存在を確認し、見つかった場合は削除できます。

于 2012-12-03T22:55:51.150 に答える
0

以下のコードで試してください。セルを再利用する場合は、imageViewすべてのセルに繰り返し追加する必要はありません。以下に示すように、セル割り当て部分で作成し、imageView.imageプロパティをその外側に設定することができます。

- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";

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

    cell.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.textColor = [UIColor whiteColor];

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(256,0,43,43)];
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    [cell.contentView addSubview:imageView];
    imageView.layer.cornerRadius = 10.0;
    //imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.layer.masksToBounds = YES;
    imageView.tag = 567; //unique tag
}

UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:567];
imageView.image = nil;

if (indexPath.section == ONE_SECTION) {

    switch(indexPath.row) {

        case 0:{
            //some code
        }
        break;
        case 2:{
                              //some code
        }
        break;
        case 3:{

            UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:567];
            imageView.image = [UIImage imageNamed:@"imageName.png"];
        }
            break;
        default:
            break;
    }
}

if (indexPath.section == TWO_SECTION) {
    //some code
}

if (indexPath.section == THREE_SECTION) {
    //some code
}

 return cell;
}

より良いアプローチは、カスタムUITableViewCellクラスを作成し、そのセルUIImageViewのメソッド内に追加することです。init次にcell.imageView.image = ...cellForRowAtIndexPathメソッドのようにプロパティを設定します。

于 2012-12-03T23:00:50.950 に答える