iOS4.3 にしてから カスタムセルを利用した UITableView の描画処理でクラッシュしてしまった。 以前のカスタムセルの処理(セルの再利用)がまずかったようだ。
#import
@interface SongListCell : UITableViewCell {
UILabel *songNameField;
UILabel *artistNameField;
}
@property(nonatomic ,retain) IBOutlet UILabel *songNameField;
@property(nonatomic ,retain) IBOutlet UILabel *artistNameField;
@end
#import
#import "SongListCell.h"
@interface SongListCellController : UIViewController {
SongListCell *cell;
}
@property(nonatomic ,retain) IBOutlet SongListCell *cell;
@end
カスタムセル用の xibファイル作成して、UITableViewCell と UIView を配置する。
・File's Owner:SongListCellController ・UITableViewCell :SongListCell
ここでポイントは、File's Owner の view と cell を UITableViewCell にバインドします。
あとは、UILabelなどに表示したいデータフィールドをバインドします。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"SongListCell";
SongListCell *cell = (SongListCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
SongListCellController *controller = [[SongListCellController alloc] initWithNibName:identifier bundle:nil];
cell = (SongListCell *)controller.view;
[controller release];
}
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
カスタムセルコントローラー ListCellController をxib で initWithNibName する。 コントローラの view を カスタムセルクラスに受け渡します。 この時 ListCellController は release します。