XIB からカスタム セルをロードする UITableView を作成しようとしています。.m および .h ファイルと一緒に EventsCell.xib があります。
セルのコンテンツと高さは動的で、未知の数のサブビューを含むことができます。
これは、セルをロードするコードです。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventsCellIdentifier";
EventsCell *cell = (EventsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"EventsCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
NSDictionary *hour = [[[eventsArray objectAtIndex:[indexPath section]] valueForKey:@"hours"] objectAtIndex:[indexPath row]];
NSArray *events = [hour valueForKey:@"events"];
cell.events = events;
cell.timeLabel.text = [hour valueForKey:@"name"];
int offset = 0;
for(NSDictionary *event in events)
{
UIView *vvv = [[UIView alloc] initWithFrame:CGRectMake(50, offset, 270, 44)];
[vvv setBackgroundColor:[UIColor clearColor]];
UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 44)];
lab.text = [event valueForKey:@"name"];
lab.backgroundColor = [UIColor clearColor];
[vvv addSubview:lab];
[cell.contentView addSubview:vvv];
offset += 44;
}
return cell;
}
セルをロードしますが、テーブルビューで数回スクロールすると、コンテンツは次のようになります。
私は何を間違っていますか? ...
ありがとうございました!
==================== 更新 ====================
今、別のことが起こっています。別のView Controllerのセルに追加するサブビューのすべての要素を追加しました。以下のように。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventsCellIdentifier";
EventsCell *cell = (EventsCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"EventsCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
for (UIView *subV in [cell.contentView subviews]){
[subV removeFromSuperview];
}
NSDictionary *hour = [[[eventsArray objectAtIndex:[indexPath section]] valueForKey:@"hours"] objectAtIndex:[indexPath row]];
NSArray *events = [hour valueForKey:@"events"];
cell.events = events;
cell.timeLabel.text = [hour valueForKey:@"name"];
int offset = 0;
for(NSDictionary *event in events)
{
EventBoxViewController *ebvc = [[EventBoxViewController alloc] initWithNibName:@"EventBoxViewController" bundle:nil];
ebvc.nameLabel.text = [event valueForKey:@"name"];
[ebvc.view setFrame:CGRectMake(50, offset, 270, 44)];
[cell.contentView addSubview:ebvc.view];
offset += 44;
}
return cell;
}
そして、それらは必要に応じてロードされません。下の画像をご覧ください。
セルをスクロールしたときにのみロードされますが、それでもロードされません。また、ラベルのテキストは割り当てられません。私が間違っていることについてのアイデアはありますか?
ありがとうございました。