2012-12-22 16 views
10

Sto implementando un UICollectionViewCell personalizzato e desidero sapere come inviare i dati del modello ad esso in modo che i dati possano essere utilizzati per inizializzare le sottoview della cella.Sottoclasse UCollectionViewCell metodo init personalizzato

registro il mio MyCollectionViewCell facendo ..

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

e nel metodo seguito, lo faccio ...

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

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

Il problema che sto affrontando è, quando una cella di isn' t nella coda di riutilizzo, inizializza una nuova cella chiamando il metodo initWithFrame (che la documentazione conferma dovrebbe accadere). Tuttavia, ho un metodo init personalizzato nella mia classe MyCollectionViewCell, che è ...

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

Voglio mia abitudine metodo inizializzare di essere chiamato, invece. Come potrei farlo? Non sto usando alcun pennino e sto facendo tutto a livello di codice.

Se non c'è alcun modo, e devo invece utilizzare il metodo initWithFrame, in quale altro modo posso passare i dati del modello al mio MyCollectionViewCell in modo da poter inizializzare le sottoview con tali dati?

Grazie!

risposta

6

Cosa dire di [cell initData: data] subito dopo averlo rimosso dalla coda? Probabilmente hai bisogno di riavviare i dati sulle celle in coda, comunque.

+0

Questo. Se riutilizzi una cella, non invierai initWith ... niente, quindi impostare i dati dovrebbe essere separato dal metodo init. – jrturton

+1

Tranne che non chiamarlo initData. Chiamalo configureForData o setData (se i dati sono una proprietà) qualcosa. init ... i metodi dovrebbero essere chiamati solo su oggetti appena assegnati. – jrturton

+0

Ha senso. Dopo aver chiamato setData e aver passato i dati del mio modello, come faccio a far scattare la cella per ricaricarla? Devo chiamare setNeedsLayout e avere un metodo - (void) layoutSubviews nella mia cella personalizzata? –

0

Un'altra opzione sarebbe quella di dare al tuo oggetto layoutAttributes un puntatore ai dati e fare in modo che la cella lo prelevi da lì nel suo applyLayoutAttributes: method.

Problemi correlati