2012-12-22 11 views
10

Wdrażam niestandardowy UICollectionViewCell, i chcę wiedzieć, jak wysłać dane modelu do niego, aby dane mogły zostać wykorzystane do zainicjowania subviews komórki.Podklasa iOS Metoda niestandardowa init UICollectionViewCell

zarejestrować moją MyCollectionViewCell wykonując ..

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

oraz w następujący sposób, robię ...

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

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

Problem jestem stoi to, gdy komórka ISN” t w kolejce ponownego użycia inicjuje nową komórkę, wywołując metodę initWithFrame (co powinno się potwierdzić w dokumentacji). Jednak mam niestandardową metodę init, w mojej klasie MyCollectionViewCell, który jest ...

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

chcę mój zwyczaj zainicjować metodę można nazwać zamiast. Jak to zrobić? Nie używam żadnych stalówek i robię wszystko programowo.

Jeśli nie ma sposobu, i muszę zamiast tego użyć metody initWithFrame, w jaki inny sposób mogę przekazać dane modelu do MyCollectionViewCell, aby móc zainicjować subviews z tymi danymi?

Dzięki!

Odpowiedz

6

Co powiesz na [cell initData: data] zaraz po usunięciu go? Prawdopodobnie musisz ponownie zainicjować dane dotyczące usuniętych komórek.

+0

To. Jeśli ponownie używasz komórki, nie przekazałeś initWith ... nic, więc konfiguracja danych powinna być oddzielona od metody init. – jrturton

+1

Poza tym nie nazwij go initData. Nazwij to configureForData lub setData (jeśli dane są właściwością) coś. init ... metody powinny być wywoływane tylko na nowo przydzielonych obiektach. – jrturton

+0

To ma sens. Po wywołaniu setData i przekazaniu danych modelu, w jaki sposób mogę uruchomić komórkę, aby ponownie załadować "interfejs użytkownika? Czy mogę wywołać metodę setNeedsLayout i zastosować metodę - (void) layoutSubviews w mojej komórce niestandardowej? –

0

Inną opcją byłoby nadanie obiektowi layoutAttributes wskaźnika do danych i pobranie komórki z komórki w metodzie applyLayoutAttributes:.

Powiązane problemy