我的问题是cell.textLabel在重新加载后不显示新数据。我可以看到cellForRowAtIndexPath
被呼叫,所以我知道reloadData
呼叫通过。如果我记录rowString
我看到正确的值,所以我设置标签文本的字符串是正确的。我做错了什么?
我有以下代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
static NSString *RowListCellIdentifier = @"RowListCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RowListCellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:RowListCellIdentifier]autorelease];
}
NSMutableString *rowString = [[NSMutableString alloc] init];
[rowString appendString:[[[rows objectAtIndex:row] firstNumber]stringValue]];
[rowString appendString:@" : "];
[rowString appendString:[[[rows objectAtIndex:row] secondNumber]stringValue]];
[rowString appendString:@" : "];
[[cell textLabel] setText:rowString];
[rowString release];
return cell;
}
- (void)viewWillAppear:(BOOL)animated {
[self.tableView reloadData];
[super viewWillAppear:animated];
}
答案 0 :(得分:0)
试
cell.textLabel.text = $VALUE;
如果它没有帮助,你确定你已经设置了tableView.delegate和tableView.dataSource吗?
答案 1 :(得分:0)
尝试:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];
}
您现在拥有的是一种不寻常的结构,可能会阻止更新UI。在设置视图的方法中,您希望在子类操作之前调用超类方法。您可以在拆除视图的方法中颠倒顺序。除非您有自定义超类,否则通常不必调用super的viewWillAppear。
答案 2 :(得分:0)
我打赌你的cell.textLabel
某种程度上被重置为零。根据我的经验,我发现最简单的方法是将cellForRowAtIndexPath:
方法视为始终创建新单元格。即使它重复使用一个单元格,我也希望为一切做好准备。
cell.textLabel
的标头文件表明默认值为nil。这意味着您需要在更改文本属性之前为textLabel指定标签。
为此,请替换:
[[cell textLabel] setText:rowString];
使用:
UILabel *label = [[UILabel alloc] init];//or initWithFrame:
label.text = rowString;
/* Insert your own customization here */
label.font = [UIFont boldSystemFontOfSize:13.0];
label.backgroundColor = [UIColor clearColor];
label.adjustsFontSizeToFitWidth = YES;
cell.textLabel = label;
[label release];