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.

¿Fue útil?

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]];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top