iPhone:UITableView不呼吁重新加载数据后显示新数据

问题描述:

我的问题是,重新加载后,cell.textLabel不显示新数据。我可以看到cellForRowAtIndexPath被叫,所以我知道reloadData调用通过。如果我登录rowString我看到正确的值,所以我设置标签文本的字符串是正确的。我究竟做错了什么?iPhone:UITableView不呼吁重新加载数据后显示新数据

我有以下代码:

- (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]; 
} 

尝试

cell.textLabel.text = $VALUE;

如果它不帮助,你确定你已经设置的tableView.delegate和tableView.dataSource?

+0

这不应该的问题。他只是使用旧的风格参考。 – TechZen 2010-05-12 21:58:02

+0

是的,我相信因为表格显示数据,所以连接必须正常吗? – dbrasco 2010-05-12 22:00:00

+0

其实它是代表和数据源被搞砸了,thx – dbrasco 2010-06-23 14:27:59

尝试:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self.tableView reloadData]; 
} 

你现在有什么是不寻常的建筑和可能阻止更新到用户界面。在设置视图的方法中,您希望在子类操作之前调用超类方法。您在将视图撕下的方法中颠倒顺序。除非你有一个自定义的超类,否则你通常不必调用super的viewWillAppear。

+0

谢谢你的建议。我刚刚尝试过,但在更新问题上没有任何区别。 – dbrasco 2010-05-12 22:08:15

+0

等一下。 viewWillAppear是你调用reloadData的唯一地方吗?如果是这样,那么表格只会在表格从视图中移除并重新显示后才会更新。 – TechZen 2010-05-12 22:13:05

+0

是的,那正是我所做的。我进入详细视图,更改数据,然后弹出视图导致viewWillAppear发射和reloadData,我将数据记录到控制台,我知道数据是好的,但仍然不可见在用户界面中 – dbrasco 2010-05-12 22:24:03

我打赌你的cell.textLabel是以某种方式被重置为零。根据我的经验,我觉得将cellForRowAtIndexPath:方法看作最容易,就好像它总是创建一个新的单元格一样。即使它正在重复使用一个小区,我也想为所有事情做好准备。

cell.textLabel的头文件指出默认值为零。这意味着你想在改变它的文本属性之前给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];