2012-04-05 5 views
0

200以上のセルを持つUITableがあります。この表は、ネットワークから入って来るデータで美しく動作します。今私は、データと一致するようにラベルの背景色を変更する方法を追加する必要があります(値が減少した場合は赤、値が増加した場合は緑色)。これは最初はうまくいくようですが、しばらくすると値が正常に更新されても色は静的になります。私は私のテーブルを表示するためのコードを更新しました色はUITableViewCellsで変更されません

アップデート:以下はlayoutSubviews方法である私のコードの例です。データはセルに完全に細かく割り当てられます。それは値が何であっても数分後に変更を拒否するセルの色です。

+0

なぜこのコードはレイアウトにありますか?それは毎回呼び出されることはありません。これはcellForRowAtIndexPathにある必要があります。 – jrturton

+0

以下の回答を読んだ後で、コードを適切な場所に移動しました。気づいてくれてありがとう。 – Seb

答えて

0

を助けるかもしれません。

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

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

+0

辞書を作成し、行インデックスと古い値を保存するのはどうでしょうか?そのようにして比較をやり直すと、それを必要とする行に基づいて辞書から古い値を引き出すことができます。 – Seb

+0

はい、またはあなたのデータソースは辞書の配列で、それぞれ古い値と新しい値の2つのキーがあります。 – jrturton

+0

それはそれをしたようだった。ご協力いただきありがとうございました。また、UITableViewCellにもう少し詳しくお答えします。私は、細胞が再利用されていることを理解しました。私が理解できなかったのは、見えていた細胞が再利用される理由でした。 – Seb

0

セルの背景色を設定すると、別のビュー、そのコンテンツビューが表示されるため、動作しません。 iOSはペインタのキャンバスのように描画を処理するので、contentViewはセルの背景に加えた変更を妨害します。しかし、あなたはcontentViewの背景色を設定することができます(UIViewです)。緑と赤の色が表示されます。

+0

私は色を見ることができますが、私は元々同じ問題を抱えています。しばらくすると、色はもう更新されないように見えます。私はそれが助けになるかどうかを見るためにスクロールを試みましたが、同じセルはどんな値に設定されても常に同じ色に設定されます。 – Seb

0

これは、deQueueの可能性があります。あなたのセルに新しいサブビューを追加してループを実行し、そこからすべてのサブビューを削除する前に試すことができます。ヌルセルの状態を確認した後に行うことを忘れないでください。

for(UIView *subview in cell.subviews){ 
    [subview removeFromSuperview]; 
} 

あなたは以前にセルに表示された値にあなたのデータソースから値を比較している

関連する問題