Sie haben viele Optionen, je nachdem, wie Ihre "baseView" -Klasse verwendet und in Ihre Anwendung integriert werden soll. Es ist nicht klar, wie Sie diese Klasse verwenden möchten - als Ansicht in einer UIViewController-Unterklasse oder als wiederverwendbare modulare Komponente, die in Ihrer gesamten Anwendung mehrfach instanziiert werden soll, um in vielen verschiedenen Ansichtscontrollern verwendet zu werden.
Wenn Ihre Ansicht die einzige Ansicht in einer UIViewController-Unterklasse sein soll, ist Phonitive korrekt. Bündeln Sie sie zusammen mit der .xib-Datei der UIViewController-Unterklasse und verwenden Sie die viewDidLoad des UIViewController, um die endgültige Initialisierung durchzuführen.
Wenn Sie jedoch möchten, dass Ihre View-Klasse eine Unterkomponente ist, die mehrfach in verschiedenen View-Controllern wiederverwendet wird und entweder über Code oder durch Aufnahme in eine .xib-Datei für einen anderen Controller integriert wird, müssen Sie sowohl die initWithFrame: init-Methode als auch awakeFromNib implementieren. beide Fälle zu behandeln. Wenn Ihre interne Initialisierung immer einige Objekte aus .xib enthält, müssen Sie Ihre .xib in Ihrem initWithFrame manuell laden, um "Kunden" -Klassen zu unterstützen, die Ihr Widget über Code erstellen möchten. Wenn eine .xib-Datei Ihr Objekt enthält, müssen Sie sicherstellen, dass Sie alle für den Code erforderlichen Finalisierungen von awakeFromNib aus aufrufen.
Hier ist ein Beispiel für das Erstellen einer UIView-Unterklassenkomponente mit dem UI-Design in einer Schreibfeder.
MyView.h:
@interface MyView : UIView
{
UIView *view;
UILabel *l;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *l;
MyView.m:
#import "MyView.h"
@implementation MyView
@synthesize l, view;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
[self addSubview:self.view];
}
- (void) dealloc
{
[l release];
[view release];
[super dealloc];
}
So sieht die NIB-Datei aus (außer dass der Eigentümer dieser Datei in die MyView-Klasse geändert werden muss).

Stellen Sie sicher, dass sowohl die Ansichts- als auch die Beschriftungsausgänge mit dem Eigentümer der Datei verbunden sind. Das ist es! Eine Vorlage zum Erstellen wiederverwendbarer UIView-Widgets.
Das wirklich Schöne an dieser Struktur ist, dass Sie Instanzen Ihres MyView-Objekts in anderen NIB-Dateien platzieren können, einfach eine UIView an der gewünschten Position / Größe platzieren und dann die Klasse im Identitätsinspektor (CMD-4) in MyView ändern können. und boom, du hast eine Instanz deines Widgets in jeder gewünschten Ansicht! Genau wie bei UIKit-Objekten können Sie Delegierungsprotokolle implementieren, damit Objekte, die Ihr Widget verwenden, über interessante Ereignisse informiert werden und Daten bereitstellen können, die im Widget angezeigt werden, um es anzupassen.