iPhone:UITableView在调用reloadData后不显示新数据

时间:2010-05-12 20:55:46

标签: iphone objective-c uitableview

我的问题是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];
}

3 个答案:

答案 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];