我创建了一个自定义的UITableViewCell类,并使用layoutSubviews方法添加自定义标签。像这样:
- (void)layoutSubviews
{
[super layoutSubviews];
if (statusLabel == nil)
{
statusLabel = [[UILabel alloc]initWithFrame:CGRectMake(430.0, 10.0, 100.0, 20.0)];
[statusLabel setTextAlignment:UITextAlignmentRight];
[statusLabel setText:@"Status, set in code"];
statusLabel.tag = 1;
[self.contentView addSubview:statusLabel];
}
}
如您所见,我已将标签的初始文本设置为“状态,在代码中设置”。
在表视图控制器中,我在cellForRowAtIndexPath方法中设置了此自定义标签的文本,如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
int index = [indexPath row];
NSString *introducerString =[introducers objectAtIndex:index];
NSArray *parts = [introducerString componentsSeparatedByString:@","];
static NSString *MyIdentifier = @"Requester";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil)
{
cell = [[[DanceCardCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:MyIdentifier] autorelease];
}
UIImage *image = [UIImage imageNamed:@"1.jpg"];
[cell.imageView setImage:image];
cell.textLabel.text = [parts objectAtIndex:1];
cell.detailTextLabel.text = @"Some text";
UILabel *statusLabel = (UILabel *)[cell viewWithTag:1];
statusLabel.text = @"Did it!";
return cell;
}
我正在使用一个表视图来显示两个列表,具体取决于按下两个按钮中的哪一个。按下按钮时,相应的表视图控制器将附加到表视图,并调用reloadData方法以触发新数据的显示。新数据会显示,但自定义标签文本应显示为“Did it!”读取“状态,设置为代码...”,直到我再次切换列表两次。
如何让自定义标签的新文字立即更新?我检查了官方文档,在更新其自定义内容后找不到任何有关刷新单元格显示的参考。
以下是展示所发生情况的屏幕截图:http://www.dsbsystems.co.uk/images/xcode1.png
答案 0 :(得分:2)
您正在初始化单元格并立即尝试在其中找到带有标记1的statusLabel。 layoutSubviews
尚未有机会被调用,因此标签尚未创建和添加。 (我建议在表视图单元格上覆盖指定的初始化方法并在那里创建标签。)
因此,当你试图提取statusLabel
时,它变为nil
,因为没有这样的视图,并且消息(调用方法)nil什么都不做(实际上,它返回nil )。如果你已经习惯了爆炸的事情,你将需要注意这一点。空引用异常。
当再次请求单元格时,不需要新单元格,因为它可以从重用队列中获得,并且可以正确找到标签。