2015-06-10 53 views
1

我在兩個不同的視圖控制器中有兩個表。在某些時候,這兩個表格可能具有相同類型的單元格。由於這兩個表都在不同的視圖控制器中,如果我使用dequeueReusableCellWithIdentifier方法來獲取單元格,我將不得不在兩個表格中都有兩個不同的單元格,但它們包含相同類型的數據。如何從xib加載tableview單元格視圖與dequereusablecellwithidentifier方法不同?

在另一方面,如果我使用的tableViewCell視圖的XIB,我可以在兩個控制器重複使用。

我知道使用dequeueReusableCellWithIdentifier可以給我帶來性能優勢。我想知道當我使用xib代替時性能會受到影響。

回答

1

當您顯示錶格視圖時,每個單元格在即將顯示時加載。 dequeueReusableCellWithIdentifier可讓您拍攝剛剛離開屏幕的單元格,並將其用於下一個將出現的單元格。這就像回收垃圾。

這是它如何工作的:

-(void)viewDidLoad{ 
    ... 
    [self.tableView registerNib:[UINib nibWithNibName:@"nibname" 
             bundle:nil] 
forCellReuseIdentifier:@"CustomCellReuse"]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    // Starting from iOS 5, the following will either dequeue an existing cell or instantiate a new one from xib 
    static NSString *CellIdentifier = @"CustomCellReuse"; 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    } 
    return cell; 
} 

如果你不重用你的細胞,你將有大的表視圖嚴重的性能問題。

你不能「重用」在不同tableviews細胞。你必須爲他們兩個實現以前的方法。

+0

initWithStyle將如何爲xib創建單元格視圖? – Krishna

+0

我更新了我的答案。 –

+0

非常感謝。這真的很有幫助。 – Krishna

0

推薦本:爲達到最佳性能,表視圖的數據源應通常重用的UITableViewCell對象時將其分配到細胞中的行的tableView:的cellForRowAtIndexPath :.表視圖維護數據源標記爲可重用的UITableViewCell對象的隊列或列表。 如果您不使用重用標識符會發生什麼情況? 如果你不這樣做,你的表格視圖將在每次顯示一行時配置一個全新的單元格。這是一個昂貴的操作,肯定會影響你的應用程序的滾動性能。 自推出iOS 6以來,您需要使用用於頁眉和頁腳視圖的reuseIdentifiers,以及UICollectionView的單元格和補充視圖。 要使用reuseIdentifiers,當被要求提供表視圖的新細胞從數據源對象調用這個方法:

static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

這種方法從隊列中現有的電池(如果可用),或創建一個新文件,如果有必要使用先前註冊的筆尖文件或類。如果沒有單元可用於重用,並且沒有註冊類或nib文件,則此方法返回nil。

相關問題