¿Cómo puedo hacer que mi Nib cargue correctamente mi subclase UIScrollView personalizada?
-
08-07-2019 - |
Pregunta
Tenía un buen UIScrollView dentro de mi plumín, que funcionó muy bien. Luego tuve algunas necesidades muy especiales y subclasificó UIScrollView. En mi Nib, cambié la clase en el inspector de identidad a mi subclase.
Pero por alguna razón, mi -initWithFrame: método nunca se llama cuando el cargador de plumillas acumula todos esos objetos a partir de la plumilla. En realidad no cambié nada en este momento en mi subclase. Y la vista de desplazamiento funciona bien. Espere que parezca un UIScrollView en blanco, incluso si le dije a la punta que debería ser un SpecializedUIScrollView para fines de prueba.
¿Hay algo más que deba considerar al subclasificar un UIScrollView mientras sigo usando un archivo Nib para ponerlo en perspectiva?
Mi inicializador dedicado se ve así:
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
NSLog(@"Hello !!!!!!!!!!!!!");
}
return self;
}
Nunca veo ese Hola en la consola, si trato de cargarlo desde el Nib. Por supuesto, si asigno e inicializo eso por mí mismo, funciona. Pero no quiero colocar mi vista de desplazamiento mediante programación, si puedo usar ese maldito Interface Builder en su lugar.
Solución
Los objetos en una plumilla o xib se almacenan como objetos serializados, esto puede significar que debe usar el método awakeFromNib
porque nunca se llama a los métodos init.
Otros consejos
Extienda initWithCoder
, asegúrese de llamar al método super. Es durante esta súper llamada que se llamará a setFrame
en su clase.
A continuación, puede volver a utilizar su initWithFrame
estándar en initWithCoder
, y el constructor de la interfaz controlará el tamaño del marco.
- (id)initWithCoder:(NSCoder *)aDecoder {
[super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
return [self initWithFrame:[self frame]];
}