Subclasificar una subclase UIView cargada desde una punta
Tengo una clase,FooView
, eso es una subclase deUIView
, y cuya vista se carga desde una punta, algo como:
+ (instancetype)viewFromNib
{
NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
return [xib objectAtIndex:0];
}
La propia punta tiene su Clase personalizada configurada paraFooView
en el inspector de identidad.
Esto se crea como:
FooView *view = [FooView viewFromNib];
Esto se comporta como uno esperaría. Sin embargo, cuando FooView se subclasifica como FooSubclassView y se crea una instancia como:
FooSubclassView *view = [FooSubclassView viewFromNib];
view
sigue siendo de tipoFooView
noFooSubclassView
.
Swizzling la clase conobject_setClass
no soluciona el hecho de que el objeto subyacente es una instancia deFooView
y, por lo tanto, los métodos llamados en la instancia de subclase serán los de la superclase (FooView
), noFooSubclassView
.
¿Cómo puedo corregir esto para que las subclases sean del tipo correcto, sin tener que crear una nueva punta para cada subclase, o tener que volver a implementar?viewFromNib
en cada subclase?