2012-10-04 29 views
3

在我的tableview中,我需要一堆(5-6種)不同的單元格。所有項目都具有相同的視覺佈局,但內容明智(標籤名稱,圖片和顏色),它們有很大不同。自定義UITableViewCell with reuseIdentifier without Style?

所以我有一個CustomUITableViewCell基類,在Interface Builder中用這個通用設計來設計。這個CustomUITableViewCell類服務器作爲一組單元子類的基類。 我使用工廠模式從工廠類的類方法生成這些子類。 這些子類沒有xibs。他們爲什麼會有共同的設計。

現在的問題是,對於每個子類,我需要一個不同的重用標識符。因此,人們會認爲讓我們覆蓋每個子類的默認初始化程序,並在其中調用另一個初始化程序initWithStyle:reuseIdentifier:

問題是它需要風格來指定。它抱怨說,我不能把nil放在那裏。但我不需要蘋果公司的任何款式,我明顯擁有自己的風格,如果我想有一種庫存風格,爲什麼要進行定製設計?我只需要指定reuseIdentifier。

如何分配重用標識符,如果它是隻讀屬性,它似乎唯一的方式來提供它是通過初始化?

回答

9

前段時間我有類似的問題。我的解決辦法是重新申報reuseIdentifier作爲讀寫實現文件屬性(在UITableViewCell子類)

@interface MyCustomCell() 
@property(nonatomic, readwrite, copy) NSString *reuseIdentifier; 
@end 

,並用不同實例變量合成屬性:

@implementation MyCustomCell 
@synthesize reuseIdentifier = _myCustomCellReuseIdentifier; 

現在您可以在自定義單元的init方法中分配self.reuseIdentifier

至少它曾在我的情況下,也許你可以使用它...

+0

我設法重寫財產(一絕招BTW。:)),但由於某些原因,隊列不返回在cellForRow中第二次和後續的時間。即使cellIdentifier確實匹配...它總是在if循環中去創建一個新的。 AFAIK,我不應該在意讓細胞排隊,我應該嗎?它在第一次數據源調用後默認到達,是嗎? –

+0

@Earl:我不確定是否正確理解了你最後的評論,但單元格只在你滾動時重用。如果一個單元不再需要,因爲該行不再可見,那麼這個單元將被重新用於不同的行。 –

+0

是的,我不知道。所以它的工作原理,我試圖滾動,它出列。謝謝。 –