2013-07-10 82 views
3

我正在嘗試使用帶有.xib文件的UITableView。過去我已經用故事板完成了這個過程,您在動態原型中聲明瞭重用ID。我有這樣的代碼- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath函數內部它應該工作:dequeueReusableCellWithIdentifier:即使在創建單元格實例後也返回nil

NSString *ReuseId = @"DefaultCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ReuseId]; 

if (cell == nil) { 
    NSLog(@"cell == nil"); 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ReuseId]; 
} 

然而,當我運行它,而不是打印cell == nil一旦它打印它的每一行。

爲什麼?

謝謝。

回答

2

第一次打開表格視圖時,不會再使用單元格,因爲所有單元格都將被實際使用。當您開始滾動表格時,單元格開始重用,並且一些單元格從頂部開始消失。

更新

假設你有一個表視圖,可以部分地顯示6行(按身高5.5)。當UITableViewController加載單元格的表格時,它會創建6個單元格實例,因爲它們都必須同時顯示。

當您開始滾動並且第一個單元格被隱藏時,它會被添加到可重用單元格集合中。那是在創建第8個單元格時(因爲第7個單元格將被新創建,因爲第1個單元格仍然可以看到半高),第一個單元格將被重用。

+0

好的。清楚一點:因爲TableViewController可以容納大約12個單元格,所以在我向下滾動到第13個單元然後回到頂部之後,它纔會開始重用單元格。 – carloabelli

+0

沒有。因爲11或12完全或部分適合屏幕。 tableview只會創建足夠的單元格,以便在滾動時放在屏幕上。 – vikingosegundo

+0

我相信你誤解了我的問題。讓我改述一下:第二行中的單元格是否被重用,或者表格視圖第一次加載時,只有單元格不可見? – carloabelli

4

你有幾行?首先在iPhone上創建多達11個或12個。取決於tableview的高度和單元格的高度。

因此,如果您的視圖中的單元格所佔的行少於單元格,則單元格重用將永遠不會發生並且不再需要。

if (cell == nil) { 
    NSLog(@"cell == nil"); 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:ReuseId]; 
} else { 
    NSLog(@"We have a reused cell!"); 
} 

嘗試多次重複您的行並緩慢滾動。現在,每當您剛剛在視圖中滾動新單元格的第一個像素時,它應該打印出「我們有一個重用的單元格!」。

相關問題