2013-05-17 53 views
1

我有一個表格有1節和許多行。每個單元格都包含一些標籤,所以我想獲得他們的文本。我的問題是,用下面的代碼,我不能得到第一個5單元格後的細胞。我知道這很奇怪。要清楚,如果我有20行,我只能得到5個單元格,下面的代碼,其餘15個爲空。然而在for循環變爲20,第5個單元都OK,但剩下的就是空..表格單元格在一個可用視圖中是空的

所有行的都是相同的,所以沒有空單元格。我的錯誤是什麼?

 NSIndexPath *indexPath; 
     ReportTableCell *cell; 

     for (int i = 0; i < [_tableReport numberOfRowsInSection:0] ; i++) 
     { 
      indexPath = [NSIndexPath indexPathForRow:i inSection:0]; 

      cell = (ReportTableCell *)[_tableReport cellForRowAtIndexPath:indexPath]; 
     } 

回答

1

這是因爲表格視圖不會保留離開屏幕的內存中的單元格。這是一種優化,可以減少內存使用並加快滾動速度。

documentation

cellForRowAtIndexPath: 

返回值
表示表或零的小區,如果小區是不可見的或indexPath超出範圍的對象。

您只能訪問此刻實際可見的單元格。

+0

是的,這是正確的。我只能看到5行。我怎樣才能訪問所有的單元格? – birdcage

+0

你不能。你爲什麼想這樣做?當它們變得可見時,您必須隨時創建您的細胞。 – DrummerB

+0

我需要合併所有單元格標籤文本並創建報告。你有什麼建議要這樣做? – birdcage

1

的UITableView隊列再利用的目的細胞。這意味着如果你有100行,它不能保證它會創建100個單元格。通常它只會創建可見的單元格,然後重新使用它們以顯示剩餘的項目。這實現方式如下:

static NSString *MyCellIdentifier = @"MyCellIdentifier"; 
UITableViewCell* cell = [tv dequeueReusableCellWithIdentifier:MyCellIdentifier]; 
//dequeueReusableCellWithIdentifier will give you the cells that has been added to queue after scroll and are ready for re-use. 
if(cell == nil){ 
    // create new. 
} 

所以技術上你不能得到所有的細胞。可以應用替代方法,直到您告訴您嘗試完成的確切目的。

相關問題