hachinoBlog

hachinobuのエンジニアライフ

UITableViewのセルの値がスクロールするごとに重なったり壊れる現象

UItableViewCellにUITextFieldをaddSubviewしてテキストフィールドを載せたセルを
1セクションに1セルの形式で9つ作成した。
動作確認したところ、スクロールすると他のセクションのセルが重なったりして滅茶苦茶になっていた。
原因としてはテーブルビューのセルを再利用する仕組みのせいだった。
今回の場合はaddSubしたテキストフィールドは解放したくなかったのでセルの数だけ再利用のidentifierを作成した。

NSArray *identifiers = [NSArray arrayWithObjects:@"a", @"b", @"c", 
                            @"d", @"e", @"f", @"g", @"h", @"i", nil];
NSString *CellIdentifier = [identifiers objectAtIndex:[indexPath section]];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

これでセルごとに再利用対象のセルが作成されたのでスクロールしても重なったりしなくなる。

参考URL
http://works.sabitori.com/2011/06/18/table-redraw/
http://devcafe.jp/blog/2010/10/uitableviewcell-%E3%82%BB%E3%83%AB%E3%81%AE%E5%86%8D%E5%88%A9%E7%94%A8%E3%81%AE%E5%95%8F%E9%A1%8C/
http://iphone-dev.g.hatena.ne.jp/tokorom/20100214/1266122421