La manera de pensarlo es que un archivo XIB es un objeto serializado y no una clase. Una instancia de una clase (es decir, un objeto) no se puede subclasificar, excepto en algunos lenguajes basados en prototipos como Javascript.
Sin embargo, una forma de burlarse de esto es crear una clase padre de tipo UIView que cargue el XIB y lo agregue a sí mismo (recuerde que un XIB contiene un NSArray de elementos visuales).
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"TestView" owner:self options:nil];
UIView* mainView = (UIView*)[nibViews objectAtIndex:0];
self.label.text = @"Parent";
[self addSubview:mainView];
}
return self;
}
El niño puede entonces simplemente anular el initialiser como
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.label.text = @"Child";
}
return self;
}
El self.label
es, por supuesto vinculado a un UILabel en el archivo XIB través de constructor de interfaces y conectado en tiempo de ejecución a través del argumento owner:self
.
Como dijo Ole, no hay herencia. Puede y debe heredar los controladores que manejan vistas que comparten funcionalidad. – fsaint
Además, es posible crear xibs para una vista específica (aunque no es tan fácil como debería ser). – Sulthan