2012-06-15 17 views
11

Tengo una subclase UITableViewController con sus células prototipo simuladas en el guión gráfico.¿DequeueReusableCellWithIdentifier: invoco un inicializador en mi subclase UITableViewCell?

Hay una buena cantidad de código en el método delegado cellForRowAtIndexPath que configura las celdas. El problema es que no necesito la mayor parte si la célula acaba de ser retirada del grupo de reutilización, porque ya se ha hecho cuando la célula se quitó de la primera vez. No puedo hacerlo en el guión gráfico porque hay algunas propiedades a las que solo puedo acceder mediante programación.

¿El UITableViewController llama a un inicializador en mi subclase UITableViewCell cuando toma una celda prototipo del guión gráfico? Intenté (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier pero eso no parece ser parte del proceso.

Respuesta

12

Cuando una instancia de UITableView llama a dequeueReusableTileWithIdentifier:, la celda no se reinicializa. En cambio, en esa llamada, la UITableViewCell que está en cola llamará al -(void)prepareForReuse. Esto se debe a que la reinicialización de la célula es costosa, y si podemos proporcionar un método mucho más simple para preparar su reutilización (eh, eh, ¿entiendes?), Ahorra un montón de trabajo con la CPU.

Ergo, si está utilizando celdas personalizadas, anule UITableViewCell prepareForReuse.

10

Probablemente no formulé mi pregunta correctamente pero estaba buscando aquí fue realmente (void)awakeFromNib.

Se llama una vez cuando la célula se cancela y no se vuelve a utilizar. Me permite configurar algunos programas mediante programación que no tiene sentido hacer en el guión gráfico.

+1

(vodi) awakeFromNib funciona perfecto para las cosas que desea que sucedan una sola vez, como agregar un reconocedor de gestos a un UILabel. –

Cuestiones relacionadas