2011-12-15 33 views
45

Estoy creando mi propio UITableViewCell personalizado para usar como back-end de un prototipo de celda. En mi clase anulo el método initwithstyle:reuseIdentifier: para hacer algunas inicializaciones personalizadas, pero no se llama a mi inicializador. Tengo un punto de quiebre en la primera línea dentro de él, así como un punto de quiebre en dequeueResusableCellWithIdentifier:. Se llama al método dequeueResusableCellWithIdentifier: y devuelve una celda iniciada, pero no se alcanza el punto de corte en initwithstyle:reuseIdentifier:. Cualquier ayuda sería genial.initwithstyle: reuseIdentifier: no se llama

+0

Muéstranos el código de su 'UITableViewDataSource' donde se está creando y células de volver por favor. – mattjgalloway

+0

Tengo el mismo problema. Pero no estoy usando guiones gráficos, lo estoy creando programáticamente. ¿Alguien sabe por qué el initWithStyle no se llama entonces? – Michael

Respuesta

82

Si su celda se está creando a partir de un prototipo de guión gráfico (que ha declarado como clase personalizada en IB), no se creará con initWithStyle... sino initWithCoder: como cualquier otro objeto cargado desde un plumín. Si tiene algún código de configuración, debe estar allí o en awakeFromNib.

+3

¿Hay algún lugar en los documentos que indique que initWithCoder siempre se utiliza cuando se carga desde un plumín? Su respuesta ayudó, pero me gustaría leer los documentos pertinentes en caso de que haya algo más que me he perdido. –

+3

¡Buena pregunta! Lo más cerca que puedo encontrar es [aquí] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/SubclassingNSView/SubclassingNSView.html), en "Inicializando ver instancias creadas en el generador de interfaz" – jrturton

+4

Hmm interesante, sugieren usar awakeFromNib para hacer cualquier configuración inicial. Entonces, initWithCoder definitivamente recibe una llamada cada vez? –

12

Con el guión gráfico involucrado, todo cambia. Este es el método que se llama.

-(id)initWithCoder:(NSCoder *)aDecoder { 
    if (!(self = [super initWithCoder:aDecoder])) return nil; 

    // Your code goes here! 

    return self; 
} 
0

Si está utilizando StoryBoarsd continuación UITableViewContoller no llamará initWithStyle reemplazarlo con initWithCoder se funciona ahora