2011-01-20 2 views
1

カスタムbackgroundViewsでセルを使用するUITableViewがあります。私はtableView:cellForRowAtIndexPath:indexPath:の背景ビューをhereとして割り当てています。一言で言えば、UITableView内のUITableViewCellの位置に依存して、特定のbackgroundView画像を割り当てたいと思います。問題のコードは次のとおりです。UITableViewCellのbackgroundViewプロパティをキャッシュする

UIImage *rowBackground = nil; 

if (row == 0 && row == sectionRows - 1) { 
    rowBackground = [UIImage imageNamed:@"row_bg_start_and_end.png"]; 
} else if (row == 0) { 
    rowBackground = [UIImage imageNamed:@"row_bg_start.png"]; 
} else if (row == sectionRows - 1) { 
    rowBackground = [UIImage imageNamed:@"row_bg_end.png"]; 
} else { 
    rowBackground = [UIImage imageNamed:@"row_bg.png"]; 
} 

((UIImageView *)cell.backgroundView).image = rowBackground; 

これはうまく動作し、私が期待している結果が表示されます。しかし、行の削除や追加については、配置を再計算して問題のビューを更新するのではなく、特定の行が前のbackgroundViewを保持することを必ず意味する問題があります。

私はdequeueReusableCellWithIdentifierの目的を理解しており、なぜこれが起こっているのですか?しかし、私はそれを固定する方法についてよく分かりませんtableView:cellForRowAtIndexPath:indexPath:を画面からスクロールして呼び出すと、行が正しく再計算され、backgroundViewが正しくリセットされることがわかります。

backgroundViewプロパティをwillDisplayCell:forRowAtIndexPath:に設定する必要がありますか?このような状況にどう対処すればよいですか?

答えて

0

問題を解決する最も簡単な方法は、新しい行をセクションに追加するときに表示されるすべての行の背景イメージを再処理することです。あなたは慎重に新しい行を挿入し、すべてのUITableViewのメソッドをオーバーライドしてのみ更新する必要がある特定の行のために、この作業を実行するチェックが、私は、これは価値があるだろうとは思いませんでした

for (UITableViewCell *cell in aTableView.visibleCells) 
{ 
    NSIndexPath *cellIndexPath = [aTableView indexPathForCell:cell]; 

    /* look at the cell.backgroundImage and if it's not appropriate 
    for the indexPath, update it */ 
} 

すなわち

努力。

関連する問題