0

UITableViewを使用してiPadアプリのレイアウトのようなグリッド(スプレッドシート)を作成しています。グリッド部分は機能しましたが、セルにUILabelを動的に追加しているため、再利用可能な部分は正常に機能していません。コードは次のとおりです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FundCell"];

    Fund *fund = [funds objectAtIndex:[indexPath row]];

    float labelWidth = 1024 / ([columnNames count] -1 );

    for(NSString *columnName in columnNames)
    {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, 0, labelWidth, 44)];

        label.backgroundColor = [UIColor clearColor];

        label.text = [fund valueForKey:columnName];

        x += label.bounds.size.width;

        [cell addSubview:label];
    }

    x = 0;

    return cell;
}

結果:

ここに画像の説明を入力してください

4

1 に答える 1

1

再利用するたびに新しいラベルを追加します。ラベルを1回だけ追加し、それらへの参照を(通常はカスタムセルサブクラスのプロパティとして)保存し、その後はテキスト値を設定する必要があります。

xibでカスタムセルを定義し、そこにラベルを配置してアウトレットを作成する方が簡単な場合があります。これをテーブルで再利用するために登録できます。必要に応じてセルを作成またはデキューします。

于 2013-02-13T21:24:16.633 に答える