iOS xcode,将UILabel子视图添加到自定义表格单元格,标签文本不会在屏幕上更新
我创建了一个自定义UITableViewCell类,并使用layoutSubviews方法添加了一个自定义标签。像这样: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
- (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)。如果您已经习惯了出现空引用异常等情况,那么您需要进一步注意这一点
当再次请求单元格时,不需要新的单元格,因为它可以从重用队列中获得,并且可以正确找到标签。谢谢。惰性初始化视图的想法并不坏,但在应用于大型视图时效果最好。创建单元时,您知道需要立即使用标签。