2012-10-13 91 views
2

當單元格首次變爲可見時,將使用init方法。 當單元格第一次變得不可見時,它將從表格​​視圖的內存中出列。UITableView刪除所有可重用單元格

UITableViewCell *cell = [searchTable dequeueReusableCellWithIdentifier:identifier]; 
if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier]; 
} 
return cell; 

可以說我滾動了整個表格,現在任何單元格都可以出列,因爲它們都已經被初始化了。

我的當前單元格的標識符從0到199.我刷新了我的表格視圖,現在我有了單元格的新信息。我使用的方法reloadData和使用標識爲200〜399爲新的細胞中加入+200細胞識別:

NSInteger index = indexPath.row + 200; 
NSString *CellIdentifier = [NSString stringWithFormat:@"%d",index]; 

現在我滾動整個表,看到細胞200到399

讓我們來想象我改變index回:

NSInteger index = indexPath.row; 

現在一個問題:老小區,從0到199的標識符仍然可以離隊,他們不能?

如果答案是They CAN be dequeued我還有一個問題:

有沒有一種方法,當我開始使用細胞隨着從200到399的標識符,以刪除與從0到199,從表視圖內存標識符細胞?

回答

3

UITableViewdequeueReusableCellWithIdentifier方法將爲您處理。如果你正在使用

以下是apple discussion thread的相關討論。檢查一下。

更新: 您需要修改您的單元標識符。如果您爲每一行創建新的CellIdentifier,那麼使用dequeueReusableCellWithIdentifier沒有意義,因爲標識符每次都不相同。

而不是

NSString *CellIdentifier = [NSString stringWithFormat:@"%d",index]; 

它應該是,

static NSString *CellIdentifier = [NSString [email protected]"cell"]; 

這意味着一旦同樣是不可見的每一個細胞都會被重用。它只會挑選不可見的單元格,並將其用於顯示下一組單元格。根據你的實現,它會創建300或400個單元,你不能做太多關於刪除以前的單元,因爲你不再有任何相同的參考。

你的方法是這樣的,

static NSString *CellIdentifier = [NSString [email protected]"cell"]; 
UITableViewCell *cell = [searchTable dequeueReusableCellWithIdentifier:Cellidentifier]; 
if (cell == nil) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier]; 
} 
cell.textLabel.text = @"something"; 
//... 
return cell; 

UPDATE2:如果你不使用ARC,它應該是,

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier] autorelease]; 

你需要有相同的autorelease

+0

你能解釋一下你如何獲得200個新細胞?請通過此鏈接https://discussions.apple.com/thread/2760904?start=0&tstart=0。如果您使用dequeueReusableCellWithIdentifier,您一次只能在內存中看到可見的單元格。其餘的單元格會自動從內存中移除。刷新時,它只會重複使用相同的單元格,並且只有單元格內的數據會發生變化。它永遠不會像200,400和所有。它將被理想地限制爲可視單元的數量,可以說是10. – iDev

+0

我已經在單元格中更正了一個錯誤= [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];請檢查答案。 – iDev

相關問題