Ich habe eine Klasse, FooView
, dass eine Unterklasse von UIView
ist, und deren Ansicht von einer Feder belastet ist, so etwas wie:eine UIView Unterklasse Vererben von einer Feder geladen
+ (instancetype)viewFromNib
{
NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
return [xib objectAtIndex:0];
}
Die Spitze selbst hat seine Gewohnheit Die Klasse wurde im Identity Inspector auf FooView
festgelegt.
Dies wird instanziiert wie:
FooView *view = [FooView viewFromNib];
Dies verhält sich wie man erwarten würde. Wenn jedoch FooView sich als FooSubclassView subclassed ist, und instanziiert wie:
FooSubclassView *view = [FooSubclassView viewFromNib];
view
ist nach wie vor vom Typ FooView
, nicht FooSubclassView
.
die Klasse mit object_setClass
Swizzling beheben nicht die Tatsache, dass das zugrunde liegende Objekt eine Instanz FooView
ist, und damit auf der Unterklasse-Instanz aufgerufen Methoden werden die von der übergeordneten Klasse (FooView
), nicht FooSubclassView
.
Wie kann ich das korrigieren, so dass Unterklassen vom richtigen Typ sind, ohne dass für jede Unterklasse eine neue Nib erstellt werden muss oder in jeder Unterklasse viewFromNib
neu implementiert werden muss?
Ich verstehe das nicht genau. Wenn es sich bei der Ansicht um den Dateibesitzer handelt, benötigen Sie eine andere Klasse, die die visuelle "Leinwand" darstellt, auf der Sie IB verwenden, oder? Entschuldigung, wenn diese Frage nicht klar ist, aber ich habe eine NIB mit nur einer einzigen NSView-Unterklasse. Vielen Dank! –