UITableViewでカスタムCellを使用した時に表示が重なる
InterfaceBuilderを使用しないでカスタムCellを使用したTableViewを作成しています。
ViewController
でUITableView
を追加して
CustomCell
クラスを作成し、そのContentView
にCustomView
クラスを追加しています。
ViewController
で
[_tableView registerClass:[CustomCell class] forCellReuseIdentifier:@"Cell"];
を使用して起動すると
1つのセルに複数のセルがかぶって表示されます
ViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
return cell;
}
CustomCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
for (UIView *subview in [self.contentView subviews]) {
[subview removeFromSuperview];
}
_dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 0, 320 - (16 * 2), 20)];
_dateLabel.font = [UIFont systemFontOfSize:15];
_dateLabel.text = [[NSDate date] description];
[self.contentView addSubview:self.dateLabel];
// ここのビューがスクロール時に2重に表示されることがある
CGRect rect1 = CGRectMake(0, 20, 160, 20);
_view1 = [[CustomView alloc] initWithFrame:rect1];
[self.contentView addSubview:_view1];
CGRect rect2 = CGRectMake(160, 20, 160, 20);
// その他ViewをaddSubView
}
return self;
}
CustomView.m
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self initializeView:frame];
}
return self;
}
-(void)initializeView:(CGRect)frame
{
for (UIView *subview in [self subviews]) {
[subview removeFromSuperview];
}
_titleLabel = [[UILabel alloc] init];
_titleLabel.frame = CGRectMake(44 + 16, 0, 160 - 44, 22);
_titleLabel.text = @"text";
[self addSubview:_titleLabel];
_conditionLabel = [[UILabel alloc] init];
_conditionLabel.frame = CGRectMake(44 + 16, 22 + 4, 160 - 44, 22);
_conditionLabel.text = @"text2";
[self addSubview:_conditionLabel];
}
原因はcellForRowAtIndexPath
で@"Cell"のIDでセルを再使用しているため起こる原因と思いますが、
registerClass
でIDを固定しているため、複数のIDで再使用をしないということができません。
カスタムCellを使用して、そのCellにaddView
した状態で表示が重ならない方法はありますか?