0

こんにちは、私はこの問題で 2 日連続で立ち往生しているので、手を差し伸べてくれる人がいるかどうか尋ねています。

4 つのセクションで構成されるテーブルビューがあります。

セクション 1 -> セルに uiimageview であるサブビューが含まれる 1 行だけで構成されます

セクション 2 -> 2 つの通常の行で構成されます (テキストを含む 2 つの単純な単純なセルのみ)

セクション 3 -> 通常の 1 行で構成

セクション 4 -> 1 行で構成され、そのセルには動的テキストを含むことができる uitextview であるサブビューが含まれているため、uitextview の高さ、したがってセルの高さは、uitextview 内のテキストの量によって異なります。

この構造を作成するコードは次のとおりです。

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


//create a nsstring object that we can use as the reuse identifier
static NSString *CellIdentifier = @"Cell";

//check to see if we can reuse a cell from a row that has just rolled off the screen
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

//if there re no cells that can be reused, create a new cell
if(cell==nil){
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


    switch (indexPath.section) {
        case 0:
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            [cell.contentView addSubview:_viewForImageHeader];

            break;

        case 1:
            cell.selectionStyle = UITableViewCellSelectionStyleGray;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

            cell.textLabel.numberOfLines = 0;
            cell.textLabel.lineBreakMode = 0;
            cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:16.0];

            break;

        case 2:
            cell.selectionStyle = UITableViewCellSelectionStyleGray;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            cell.textLabel.font = [UIFont fontWithName:@"AmericanTypewriter" size:16.0];
            break;

        default:
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            [cell.contentView addSubview:_textViewForArticle];

            break;

    }

}
else{

    NSLog(@"in else");

}


//here i fill in the 2 normal cells with text


return cell;

}

uitableview が (ポートレート モードで) 読み込まれると、すべてが完璧になります (画像はセクション 1 にあり、セクション 2 と 3 には正しいテキストが含まれ、セクション 4 には動的テキストがあります)。しかし、アプリを回転させ始めると、すべてのセルが混同されます。たとえば、セクション 4 でセクション 3 の内容を見つけたり、その逆を行ったりします。

これは、セルを正しく再利用していない可能性があるという事実に関係していると思います。タグを使用する必要がありますか? その場合、特定のケースでタグの使用を実装するにはどうすればよいですか?

4

2 に答える 2

0

はい、これは細胞の再利用によるものです。ここにはいくつかのオプションがありますが、この tableView に 5 つ以上のセルが存在しない場合、最も簡単で最適な解決策は、セルを再利用しないことです。つまり、「dequeueReusableCellWithIdentifier」を呼び出す代わりに、毎回新しいセルを割り当てるだけです。

より多くのセルがある場合、これはパフォーマンスを低下させますが、セルが静的で制限されている場合 (そうであるように見えます)、セルを再利用しようとしても実際の利益はありません。

4つの「タイプ」のセルとより多くの行(より動的に割り当てられたセル)がある場合、解決策は、セルの4つの「タイプ」のそれぞれに対して UITableViewCell をサブクラス化し、セクションなどに基づいて正しいものを呼び出すことですあなたの基準は。

于 2012-11-07T21:37:15.147 に答える
0

ケースswitchif付け状態 - 後if and else

于 2012-11-07T21:31:16.393 に答える