Tengo una subclase de UIView que está instanciada en un archivo XIB. Necesito que haga algo de inicialización (configura algunas variables y crea una subvista).¿Dónde inicializar UIView personalizado, instanciado en Interface Builder?
Sin embargo, no siempre crea una instancia de esta vista a través de Interface Builder. Lo hago programáticamente también. En ambos casos, la inicialización debe ser la misma.
Mi inicializador designado es initWithValues:
.
La pregunta es; ¿dónde realizo la inicialización?
Desde que tengo que llevarla a cabo en 2 lugares diferentes, me di cuenta que necesito para refactorizar en un initialize
método separado (o algo así), y llamarlo desde initWithValues:
.
Pero cuando se carga desde IB, se llaman tanto initWithCoder:
como awakeFromNib
. ¿De qué método debo llamar al initialize
? ¿O debo llamar al initWithValues:
desde initWithCoder:
y no hacer nada en awakeFromNib
?
¿No es 'incorrecto' llamar a dos inicializadores diferentes de la superclase? ¿No debería llamar al inicializador designado de mi subclase ('initWithValues:') de 'initWithCoder:'? – Rits
¿No es 'incorrecto' llamar a dos inicializadores diferentes de la superclase? → No porque solo se llamará a uno de ellos. ¿No debería llamar al iniciador designado de mi subclase (initWithValues :) desde initWithCoder :? → parcialmente sí. initWithCoder: espera que desarchive el objeto. Es por eso que llamamos [super initWithCoder]; al hacer esto, la vista se inicializará. Ahora solo necesitas iniciar otros ivars, algo que supongo que estás haciendo dentro del método de inicialización. – nacho4d