2012-06-15 11 views
11

Ho una sottoclasse UITableViewController con le sue celle prototipo imbrogliate nello storyboard.Does dequeueReusableCellWithIdentifier: chiama un inizializzatore nella sottoclasse UITableViewCell?

C'è una discreta quantità di codice nel metodo cellForRowAtIndexPath delegato che imposta le cellule. Il problema è che non ho bisogno della maggior parte di esso se la cella viene appena rimossa dal pool di riutilizzo, perché è già stata eseguita quando la cella è stata rimossa dalla coda la prima volta. Non posso farlo nello storyboard perché ci sono alcune proprietà che posso accedere solo programmaticamente.

L'UITableViewController chiama un inizializzatore nella sottoclasse UITableViewCell quando prende una cella prototipo dallo storyboard? Ho provato (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier ma questo non sembra essere parte del processo.

risposta

12

Quando un'istanza UITableView richiede dequeueReusableTileWithIdentifier:, la cella non viene reinizializzato. Invece, in quella chiamata, UITableViewCell che viene rimosso dalla coda chiamerà -(void)prepareForReuse. Questo perché reinizializzare la cella è costoso, e se possiamo fornire un metodo molto più semplice per prepararci al suo riutilizzo (eh, eh, capito?) Risparmia un sacco di lavoro sulla CPU.

Ergo, se si sta utilizzando cellule personalizzate, ignorare UITableViewCell prepareForReuse.

10

probabilmente non ho frase mia domanda correttamente, ma ero alla ricerca di qui era in realtà (void)awakeFromNib.

viene chiamato una volta quando la cella viene eliminato dalla coda e non sul riutilizzo. Mi consente di eseguire alcune impostazioni a livello di codice che non ha senso fare nello storyboard.

+1

(Vodi) awakeFromNib funziona perfetto per le cose che vuoi che accada solo una volta, come l'aggiunta di un sistema di riconoscimento gesto per un UILabel. –

Problemi correlati