2012-03-02 36 views
2

我對objective-c非常陌生,並且對原型單元格有疑問。具有自定義類的原型單元不會引發init?

我有一個自定義單元格的tableview,它很好地工作。

現在我還覆蓋-(id)init-(id)initWithStyle: reuseIdentifier:

如果我做了檢查類的小區我的自定義單元格級,這顯然是我的自定義類的,但也init方法是不斷調用。

因此,它爲我創建它們,但不知何故避免發射-(id)init這似乎對我來說很奇怪。

我想我可以自己初始化它們,但它似乎真的很奇怪,它們可以存在沒有被創建?

謝謝!

+0

是否有可能它看起來像我的類是我的自定義類型,因爲我在出列時將其轉換,並且我的自定義類上的靜態字符串工作,因爲即使沒有實際實例也可以訪問該靜態字符串?我只是集思廣益:)我可以在週一發佈更多代碼。 – Ostmeistro 2012-03-02 15:39:36

回答

18

如果它是一個故事板的原型單元格。 - (id)initWithCoder:被調用。所以你需要重寫:

- (id)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 
     //custom stuff here 
    } 

    return self; 
} 

對於從故事板中喚醒的任何東西都是如此。

+0

我不能upvote你,但這是嚴重的幫助,我無法找到這個信息在任何地方的文檔或網絡上,你可能已經幫助數百未來的旅客:) – Ostmeistro 2012-05-03 12:34:43

+0

太棒了!很高興我能幫上忙。 – theVurt 2012-05-03 13:04:56

+0

令人非常沮喪的是,根據UITableViewCell.h,initWithStyle ... init方法被表示爲「指定初始化程序」。很遺憾,Objective C沒有像Java或C#這樣的「合適的」OO構造函數。 – 2014-02-19 11:05:43

0

你應該初始化定製電池所使用的方法是:

-(id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier{ 

    if(self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]){ 

    } 
    return self;  
} 
+0

這不是一個棄用? 無論如何,它不起作用,與重寫init本身的結果相同,它們都沒有被觸發,但是一個const字符串被初始化並且可以被獲取,所以它絕對是一個永遠不會經過任何init的類的實例。謝謝' – Ostmeistro 2012-03-02 11:32:47

1

你從廈門國際銀行加載這些細胞?如果是這樣,請嘗試使用awakeFromNib

+0

對不起,不,我有故事板文件中定義的單元格樣式。 爲了澄清,現在我通過將數據對象傳遞給單元格來設置單元格中的文本。所以在單元的代碼中,我有一個方法,它被調用並且可以工作。 問題是我無法重寫initWithFrame或initWithStyle,甚至init並把代碼放在那裏,因爲它永遠不會觸發。所有單元格都是通過避免初始化而在內部和神祕地創建的。這不是一個真正的問題,但我認爲它很奇怪。 – Ostmeistro 2012-03-06 10:07:56

+0

對我來說,這是正確的答案。此外,它不僅僅適用於單元格,還適用於單元格內的自定義視圖。如果一個覆蓋它的awakeFromNib方法,這樣的自定義視圖就可以從故事板工作。這真棒,謝謝! – naitoon 2013-05-14 18:53:57

相關問題