iOS xcode,将UILabel子视图添加到自定义表格单元格,标签文本不会在屏幕上更新

iOS xcode,将UILabel子视图添加到自定义表格单元格,标签文本不会在屏幕上更新,ios,uitableview,uilabel,Ios,Uitableview,Uilabel,我创建了一个自定义UITableViewCell类,并使用layoutSubviews方法添加了一个自定义标签。像这样: - (void)layoutSubviews { [super layoutSubviews]; if (statusLabel == nil) { statusLabel = [[UILabel alloc]initWithFrame:CGRectMake(430.0, 10.0, 100.0, 20.0)]; [s

我创建了一个自定义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];
    }        
}
如您所见,我已将标签的初始文本设置为“Status,set in code”

在表视图控制器中,我在CellForRowatineXpath方法中设置此自定义标签的文本,如下所示:

- (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!”)将为“Status,set in code…”,直到我再次切换列表两次

如何获得自定义标签的新文本以立即更新?我已经查看了官方文档,没有找到更新自定义内容后刷新单元格显示的任何参考


下面是一个屏幕截图,演示发生的情况:

您正在初始化单元格,并立即尝试查找其中带有标记1的statusLabel<代码>布局子视图还没有被调用的机会,因此尚未创建和添加标签。(我建议重写表视图单元格上指定的初始值设定项方法,并在那里创建标签。)

因此,当您尝试拉出
statusLabel
时,它将变为
nil
,因为没有这样的视图,而消息传递(在上调用方法)nil根本不起任何作用(实际上,它返回nil)。如果您已经习惯了出现空引用异常等情况,那么您需要进一步注意这一点


当再次请求单元格时,不需要新的单元格,因为它可以从重用队列中获得,并且可以正确找到标签。

谢谢。惰性初始化视图的想法并不坏,但在应用于大型视图时效果最好。创建单元时,您知道需要立即使用标签。