0

200 以上のセルを持つ UITable があります。このテーブルは、ネットワークから入ってくるデータをうまく処理します。ここで、データに合わせてラベルの背景色を変更する方法を追加する必要があります (値が減少した場合は赤、値が増加した場合は緑)。これは最初はうまくいくように見えますが、しばらくすると、値が正常に更新されても色が静的になります。以下は、layoutSubviews メソッドにある私のコードの例です。

アップデート

テーブルを表示するようにコードを更新しました。データは完全に問題なくセルに割り当てられることに注意してください。値が何であれ、数分後に変更を拒否するのはセルの色です。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        UILabel* label = [[UILabel alloc] initWithFrame:self.contentView.bounds];
        label.tag = 1;
        [cell.contentView addSubview:label];
        [label release];
    }
    UILabel *label = (UILabel*)[cell viewForTag:1];
    float value = [label.text floatValue];
    float newValue = [dataSource objectAtIndex:indexPath.row];

    // Get the current value of the cell and compare it with the new value
    if(value < newVal)
    {
        label.backgroundColor = [UIColor greenColor];
    }
    else if(value > newVal)
    {
        label.backgroundColor = [UIColor redColor];
    }
    label.text = [NSString stringWithFormat:@"%d", newValue];
}
4

3 に答える 3

0

その上に別のビュー、そのcontentViewがあるため、セルの背景色の設定は機能しません。iOSは画家のキャンバスのように描画を処理するため、contentViewは、セルの背景に加えた変更をすべて妨害します。ただし、contentView(結局のところUIView)で背景色を設定すると、緑と赤の色が表示されます。

于 2012-04-05T19:29:33.473 に答える
0

データソースの値を、以前にセルに表示された値と比較しています。

これは有効な比較にはなりません。キューから取り出されて再利用されるセルの合計インスタンス数は 8 または 10 程度になります。したがって、たとえばセル 60 のデータソースを、このセルで使用された最後の値 (行 45 からのものである可能性がある) と比較することになります。これは無意味です。

データソースのどこかに古い値を保存し、代わりにそれと比較する必要があります。

于 2012-04-05T21:04:56.463 に答える