SummerWind

Web, Photography, Space Development

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を呼び出して消去してしまうかたちです。今のところこのコードで問題なさそうです。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。