2012-12-22 137 views
10

我正在實現自定義UICollectionViewCell,並且我想知道如何向其發送模型數據,以便數據可用於初始化單元格的子視圖。iOS子類UICollectionViewCell自定義初始化方法

註冊我做我的MyCollectionViewCell ..

[self.collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:@"MyCell"]; 

,並在下面的方法,我做...

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

MyCollectionViewCell* cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell" forIndexPath:indexPath]; 

我面臨的問題是,當一個細胞ISN」 t在重用隊列中,它通過調用initWithFrame方法(文檔確認應該發生)來初始化一個新的單元。不過,我有一個自定義的init方法在我MyCollectionViewCell類,這是...

-(id) initWithFrame:(CGRect)frame withData: (NSDictionary*) data; 

我想我的自定義初始化方法,而不是調用。我會怎麼做?我沒有使用任何筆尖,我正在以編程方式做所有事情。

如果沒有辦法,我必須使用initWithFrame方法代替,我怎麼可以將模型數據傳遞給MyCollectionViewCell,以便我可以使用該數據初始化子視圖?

謝謝!

回答

6

剛剛出現它之後[cell initData:data]怎麼樣?無論如何,您可能需要重新初始化出隊單元格上的數據。

+0

這個。如果你正在重用單元,你不會傳遞initWith ...任何東西,所以設置數據應該與init方法分開。 – jrturton

+1

除了,不要把它叫做initData。調用它的configureForData或setData(如果數據是一個屬性)的東西。 init ...方法只能在新分配的對象上調用。 – jrturton

+0

這是有道理的。在我調用setData並傳入模型數據後,如何觸發單元格重新加載它的UI?我是否要調用setNeedsLayout並在我的自定義單元格中有 - (void)layoutSubviews方法? –

0

另一種選擇是給你的layoutAttributes對象一個指向數據的指針,讓單元在它的applyLayoutAttributes:方法中抓取它。