Wird benutzerdefiniertes UIView von der Nib geladen, sind alle in nib enthaltenen Subviews null?
Habe ich eine benutzerdefinierte UIView
Objekt mit einem nib
definiert, dass die Ansicht/Untersicht layout. Meine Steckdosen angeschlossen sind, und wenn ich init das Objekt aus initWithFrame:
alles in Ordnung ist.
Das problem das ich habe ist wenn ich mit IB einbetten der UIView
in eine andere Feder; das benutzerdefinierte UIView
erscheint, aber keines der subviews enthält es erscheinen - in der Tat, Ihre Symbole lösen zu null. Ich habe eine sehr minimale initWithCoder:
und awakeFromNib:
Umsetzung (nicht nur macht, Protokollierung), und mein Verständnis ist, dass die Feder wird deserialisiert die Untersichten sollten mindestens initialisiert werden während des Prozesses?
Den nur Schluss komme ich auf meine eigene ist, dass eines von zwei Dingen geschieht: entweder meine Steckdose Verweise sind korrupt/schlecht ist und nicht funktioniert, oder mein Verständnis von Last-sich-von-nib-Prozess ist gestört und ich bin etwas fehlt.
Vielen Dank im Voraus!
Edit: (Code gepostet, für die Nekto wie gewünscht... als du wirst sehen, es tut Protokollierung und das ist es, heh.)
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
NSLog(@"ThumbnailGridView.initWithCoder frame= %f, %f", self.frame.size.width, self.frame.size.height);
}
return self;
}
- (void)awakeFromNib
{
NSLog(@"ThumbnailGridView:awakeFromNib");
}
Edit 2: Federn, regler, Untersichten, usw..
Federn: ich habe eine einzelne Feder mit einem UIView. Diese UIView enthält eine einzige UIScrollView, die gefüllt ist mit einem raster von UIViews, die definiert sind, in eine andere Feder. (Hinweis: dieser Teil gut funktioniert, wie das füllen erfolgt programmgesteuert und arbeitet mit einem initWithFrame: call.) Das problem hier ist, dass der UIScrollView symbol nil, nach initWithCoder: und awakeFromNib: sind beide genannt, so dass Objekte nur Hinzugefügt, um null und nichts passiert. Wenn der scrollview symbol war nicht nil ist, ich bin mir sicher, dass das funktionieren würde.
Controller: Es sind zwei Controller, verwenden diese, ist man fertig mit initWithFrame: und funktioniert perfekt, der andere bettet Sie wie eine Feder-basierte Referenz. (Wie an anderer Stelle erwähnt hier die Definition einer UIView in IB, festlegen der benutzerdefinierten Klasse.) Ich trat durch die code-Ansicht -ist - korrekt initialisiert - nur seine subviews "fehlen".
Wird diese Hilfe geben ein klareres Bild von der situation?
InformationsquelleAutor der Frage strahlr | 2011-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Missverständnisse wie nib laden funktioniert. Wenn Sie eine benutzerdefinierte UIView und erstellen Sie eine nib-Datei zu legen, dessen subviews Sie können nicht nur hinzufügen, eine UIView zu einem anderen nib-Datei, ändern Sie den Klassennamen im IB, um Ihre benutzerdefinierte Klasse und erwarten, dass die nib-be-system, um es herauszufinden. Sie brauchen, um zu ändern, initWithCoder der benutzerdefinierten UIView-Klasse programmgesteuert laden der nib, der definiert, dessen Untersicht layout. z.B.:
Ihre benutzerdefinierte Ansicht der nib-Datei muss die 'File' s owner' class set, um Ihre benutzerdefinierte view-Klasse und man braucht eine Steckdose in Ihrer benutzerdefinierten Klasse namens 'toplevelSubView" verbunden mit einem Blick in Ihre benutzerdefinierte Ansicht nib-Datei, die als container für alle Untersichten. Fügen Sie zusätzliche Steckdosen, um Ihre view-Klasse, und schließen Sie den Untersichten zu "Datei-Besitzer" (Ihre eigenen UIView).
Alternativ einfach erstellen Sie Ihre benutzerdefinierte Ansicht programmgesteuert und bypass IB.
InformationsquelleAutor der Antwort Robin Summerhill
Überprüfen Sie, dass der Aufruf des "super" - Umsetzung von initWithCoder: und awakeFromNib in jeder überschriebenen Methoden, d.h.
InformationsquelleAutor der Antwort Robin Summerhill