Способ думать, что XIB-файл представляет собой сериализованный объект , а не класс. Экземпляр класса (т. Е. Объект) не может быть подклассом, за исключением некоторых языков, основанных на прототипах, таких как Javascript.
Один из способов издеваться над этим - это создать родительский класс типа UIView, который будет загружать XIB и добавлять его к себе (помните, что XIB содержит NSArray визуальных элементов).
- (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;
}
Ребенок может тогда просто переопределить Инициализатор, как
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.label.text = @"Child";
}
return self;
}
self.label
, конечно, связанно с UILabel в файле XIB через интерфейс строитель и подключен во время выполнения с помощью owner:self
аргумента.
Как сказал Оле, наследования нет. Вы можете и должны наследовать контроллеры, которые обрабатывают представления, которые разделяют функциональность. – fsaint
Кроме того, возможно создание xib для определенного вида (хотя это не так просто, как должно быть). – Sulthan