UITableViewCellの再利用
最近iPhoneアプリを開発していたりするわけですが、開発中にUITableViewCellで描画が重複する問題が起きたので解決方法をメモ。
UITableViewCellはreuseIdentifierを利用してよくセルを使いまわしたりします。以下はUITableViewCellの生成でよく使うパターンのコード。
NSString *identifier = @"sample";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithFrame:CGRectZero
reuseIdentifier:identifier] autorelease];
}
これだけだと、カスタムセルの場合は再利用時に、前のセルで描画したサブビューが残ってしまっているために表示が重なってひどいことになります。これを解決するには、再利用時にはサブビューを一度クリアしてやるのがよいらしいので、こんなコードを追加。
for (UIView *subview in [cell.contentView subviews]) {
[subview removeFromSuperview];
}
再利用時はcellの全てのサブビューに対して、removeFromSuperviewを呼び出して消去してしまうかたちです。今のところこのコードで問題なさそうです。