2010-05-12 60 views
2

我的問題是,重新加載後,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]; 
} 

回答

0

嘗試

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

0

嘗試:

- (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

0

我打賭你的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]; 
相關問題