Edited der Kürze halber:Nib Objekte (Subviews) Zugriff auf Objekte im Viewcontroller
Wie funktioniert ein Subview Zugriffseigenschaften in seiner Superview und View-Controller ist seine Superview? Einfach genug, um die Kette hinunterzugehen. Wie gehen wir zurück?
Original (ausführlich) Beitrag:
Das unmittelbare Problem Ich versuche, die „Geburt“ zu lösen, ist die Vereinfachung einer etwas komplizierten Ansicht. Das große Bild hat mit Nibs zu tun und wie Unterklassen (insbesondere von UIView), die über triviale Initialisierer hinausgehen, wiederhergestellt werden, wenn die Ansicht geladen wird.
Ich habe einige benutzerdefinierte UIViews - Subviews einer Unteransicht der Ansicht meines Viewcontrollers. Wenn ich diese Ansichten instanziiere, benötigen sie einen Verweis auf einige Eigenschaften (NSNumberFormatter, & NSDictionary) des View-Controllers.
Currenty Ich benutze eine Methode, um sie zu instanziieren:
- (id)initWithFrame:(CGRect)frame items:(NSDictionary *)dictionary forEditingMode:(EditingMode)mode
Ich experimentiere mit ihnen in einem Nib bewegen sich ihnen rekonstituieren zu lassen und in grundlegende Design-Probleme läuft. Ein Wesen, ich denke, ich bin auf InitWithFrame als Standardinitialisierer beschränkt?!? Wenn ja, wie können diese Objekte in den übergeordneten View-Controller schauen und einen Verweis auf das Dictionary und einige andere Eigenschaften erhalten?
Gibt es Methoden, die ich innerhalb von initWithFrame aufrufen könnte (ähnlich denen, die den UIApplication-Delegaten abrufen), aber stattdessen der untergeordneten Ansicht ermöglichen würde, Methoden an die übergeordneten Ansichten und/oder Controller zu senden?
in der MVC Polizei schicken, ich bin sicher, dass ich etwas zu brechen ...
also sagen Sie ein IBOutlet in diese Teilansichten, die zurück auf die Superview oder Viewcontroller verweist? Ich bin noch nicht darauf gestoßen ... ist das ziemlich häufig? – Meltemi
Es ist im Wesentlichen das Delegiertenmuster.Sie geben der Unteransicht eine Steckdose mit dem Namen "delegate" und ein Delegate-Protokoll (in der Vergangenheit wäre dies informell, obwohl Sie jetzt ein formales Protokoll mit optionalen Methoden verwenden können). Dann machen Sie die Superview konform zum Protokoll. Schließlich legen Sie es als den Delegaten fest, entweder in IB oder mit einer Accessor-Nachricht. –
Yup, wie Peter sagte, Ihr View-Controller wird im Grunde ein Delegat für die Unteransicht. Stellen Sie sicher, dass Sie dies zu einer "Zuweisungs" -Eigenschaft machen oder Sie erhalten einen Retain-Zyklus. –