2009-03-20 16 views
0

Ich habe eine Nib-Datei, wo ich eine Ansicht habe, die ein Hintergrundbild, eine Schaltfläche und ein anderes Bild enthält, das den gesamten Bildschirm (ein Schatten) abdeckt, der nach vorne verschoben werden muss . In der Ansicht erstellen ich untergeordnete Ansichten, und nachdem ich diese erstellt und mit [self addView] hinzugefügt habe, muss ich das Schattenbild nach vorne verschieben.Subviews von UIView in Interface Builder hinzugefügt

Ich verwende derzeit das Tag-Attribut, um diese Ansicht zu finden, aber ich denke, es gibt wahrscheinlich einen besseren Weg, indem ich die Subviews identifiziere, die ich in Interface Builder durch einen Namen hinzufüge.

Ich versuche, ein IBOutlet zu verbinden, um die Unteransicht mit seinem Elternteil zu verbinden, aber es hat nicht funktioniert (und keinen Sinn gemacht, da die Unteransicht bereits mit seinem Elternteil in irgendeiner Weise verbunden ist).

Irgendwelche Hinweise?

Antwort

2

Die IBOutlets Weg sollte funktionieren, und ist wahrscheinlich der beste Weg, es zu tun. Stellen Sie sicher, dass Sie in Interface Builder die richtige Verbindung hergestellt haben, nachdem Sie sie in der .h-Datei deklariert haben.

+0

Kein Glück. Ich füge ein IBOutlet in der Elternansicht hinzu und verbinde sein Kind, aber wenn ich versuche, darauf zuzugreifen, bekomme ich null anstelle eines Objekts. Ich habe versucht sowohl mit einer Eigenschaft und mit einer Variablen, mit dem gleichen Glück. – pgb

+0

Wo wird Ihr IBOutlet deklariert? Wenn Sie die Metapher für eine Nib pro Controller verwenden, besteht eine andere Möglichkeit darin, IBOutlet im Eigentümer der Dateien (dem Controller) zu deklarieren und dann sicherzustellen, dass die im Besitzer der Datei angegebenen Outlets mit den Elementen in IB verknüpft sind. So mache ich es. – hyuan

+0

Ich erkläre die Ausgänge auf der UIView-Unterklasse Ich versuche, eine Verbindung mit anderen Ansicht, nicht in der Steuerung. – pgb

0

An welchem ​​Punkt versuchen Sie, auf die Unteransichten zuzugreifen? Wenn Sie innerhalb von init eines ViewControllers versuchen, sind die IBOutlets gleich Null. Die erste Methode, die Sie erhalten können, ist wahrscheinlich viewDidLoad.

Der Grund, warum es Sinn macht, die Dinge auf diese Weise zu tun, ist, dass IBOutlets nur direkte Zeiger auf einige Komponenten sind, auch wenn sie bereits Subviews von etwas anderem sind. Spart nur eine Menge Jagd.

+0

Ich versuche, auf eine Methode zuzugreifen, die von InitWithCoder aufgerufen wird: in der Ansicht. – pgb

+0

Versuchen Sie stattdessen mit viewDidLoad - im Grunde macht es das gleiche, wird nur einmal aufgerufen, wenn die Ansicht geladen ist. –

0

Die Verwendung des Tags ist eine vollkommen gültige Methode zum Auffinden bestimmter Ansichten, solange Sie die viewWithTag: -Methode verwenden. Wenn Sie bereits Tags verwenden, müssen Sie nicht zu IBOutlets wechseln, es sei denn, Sie möchten einfach nicht viewWithTag: aufrufen.

1

Das iPhone lädt die View-Controller langsam. Die Nib wurde möglicherweise nicht in InitWithCoder oder einer anderen Init-Methode geladen, wie von Kendall angegeben.

viewDidLoad ist der bevorzugte Ort, um auf alles von der Spitze zuzugreifen, wenn Sie darauf zugreifen möchten, bevor die Ansicht angezeigt wird.

Hoffe, dass hilft.

Verwandte Themen