2012-03-22 39 views
7

在iOS應用程序中,我們必須先使用我們的表格視圖註冊nib文件,然後才能使用UITableView#dequeueReusableCellWithIdentifier如何檢查重用標識符是否已經用UITableView註冊?

例子:

static NSString *myReuseIdentifier = @"MyReuseIdentifier"; 
UINib *cellNib = [UINib nibWithNibName:myReuseIdentifier bundle:nil]; 
[self.tableView registerNib:cellNib forCellReuseIdentifier:myReuseIdentifier]; 

有沒有一種方法來檢查,如果筆尖已與一個UITableView註冊?

我有一個自定義單元格,我在我的應用程序中的幾個控制器的各種表格中使用。我想將一些代碼移到宏中。像

-(CustomCell *)customCell:(UITableView *)tableView 
{ 
    static NSString *reuseIdentifier = @"MyReuseIdentifier"; 
    if (![table hasAlreadyRegisteredNib:reuseIdentifier]){ 
     UINib *cellNib = [UINib nibWithNibName:reuseIdentifier bundle:nil]; 
     [self.tableView registerNib:cellNib forCellReuseIdentifier:reuseIdentifier];  
    } 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
    return cell; 
} 
+0

你爲什麼不直接在viewDidLoad方法中註冊你的筆尖? – JiaYow 2012-03-22 19:22:26

+0

因爲我想堅持這個在多個控制器共享的宏 – bodacious 2012-03-23 09:01:44

+0

但是由於你有各種表,你必須註冊每個表的筆尖。 – 2016-12-01 14:28:15

回答

4

什麼我不知道這是否是你想要什麼,但

-dequeueReusableCellWithIdentifier: 

返回nil如果單元格不準備重用。否則,它會返回單元格,所以你可以簡單地嘗試。

+0

偉大的提示!所以我可以檢查單元是否爲零,如果是這樣的話,我用表格註冊Nib,然後返回單元格!謝謝 – bodacious 2012-03-23 09:10:36

+0

當根據nil在iOS 5上註冊NIB時要小心。啓用VoiceOver時有一個錯誤:在這種情況下,它始終返回nil。所以你最終會陷入無限循環註冊循環。更多細節:http://stackoverflow.com/a/13881778/235297 – 2012-12-14 18:07:42

0

我相信registerNib:forCellReuseIdentifier:的意義在於減少樣板代碼。你可以簡單地在你的viewDidLoad方法中調用一次嗎?

+0

我試圖避免在多個控制器中重複使用相同的代碼 - 我將其作爲宏編寫 – bodacious 2012-08-20 20:14:37

相關問題