カスタム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:
に設定する必要がありますか?このような状況にどう対処すればよいですか?