2010-12-13 29 views
0

這裏是一個Xcode項目,我只是做了問這個問題:的UITableViewDelegate方法

http://www.mediafire.com/?z26ufsfhby62br9

打開日誌並運行它。您會發現它輸出display: xcreate: x,其中x是一個數字0到49並且對應於相同數字的單元格。在執行任何滾動操作之前,它應該只輸出到22,因爲Apple總是吹噓自己的桌面視圖是根據需要加載的。

它基本上顯示,幾乎一出現tableview就爲每個單元格觸發了tableView:willDisplayCell:forRowAtIndexPath:tableView:cellForRowAtIndexPath:,爲什麼?

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"create: %i", indexPath.row); 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell... 
    cell.textLabel.text = [NSString stringWithFormat:@"%i", indexPath.row]; 
    return cell; 
} 

- (void) tableView:(UITableView *)tableView 
    willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"display: %i", indexPath.row); 
} 

爲什麼在tableView加載後(以及在每個單元格出現之前)調用上述meothds?當然,他們應該在每個細胞出現之前才被調用?

+0

當我運行它而沒有觸及任何東西時,只顯示前23行(從0到22),日誌確認只有23個單元格被創建並顯示。這是模擬器,4.2,最新的SDK。 – Costique 2010-12-13 17:34:05

+0

由於某些原因,只有當模擬器是活動窗口時纔會啓動。 – 2010-12-13 17:52:16

+0

我從你的代碼中添加了上述方法。 – vikingosegundo 2010-12-14 01:08:30

回答

0

如果您的表視圖在實際完全顯示之前重新加載,那可能會導致您看到的行爲。然後單元格會被初始化,準備顯示,但隨着表格重新加載,所有這些都會丟失(甚至在屏幕上顯示之前)。

+0

爲什麼它會在完全顯示之前重新加載? – 2010-12-13 18:12:55

+0

如果您在任何地方調用'reloadData',或者更改數據源或更改框架,或者在已經準備好要顯示的單元格之後對錶格視圖執行任何操作。底線是你不能真正期待它*不*重新加載它的數據,因此你的代碼在這種情況下應該總是正確行事。 – 2010-12-13 18:32:06

1

這些是默認的委託方法..每次都會爲每個單元格調用這個方法。

您可以使用willDisplayCell:forRowAtIndexPath:來配置字體和文本顏色。在較新版本的iPhone中,對於某些表格配置,如果在tableView:cellForRowAtIndexPath:方法中配置標籤文本顏色等內容,則在實際顯示單元格之前的某個時間點,您的更改將會丟失。在這裏,您可以執行諸如更改標籤顏色,調整背景突出顯示等事情。

+0

不,我知道他們是什麼,做什麼以及何時使用它們。然而,我不知道爲什麼他們被稱爲一個單元格時,單元格不顯示 – 2010-12-13 17:47:53

+2

這不回答這個問題,爲什麼upvotes? – 2010-12-13 17:54:49

+0

對我而言,它只能顯示0到22 – KingofBliss 2010-12-13 17:55:01

相關問題