Um aus einem Code eine Eltern-Kind-Beziehung zwischen zwei View-Controllern zu erstellen, ist es im Grunde nur eine Frage von:
%Vor% Dabei ist self der übergeordnete Ansichtscontroller.
Aber, Was, wenn ich die gleiche Beziehung komplett aus dem Interface Builder erstellen möchte?
Oder mit anderen Worten: Gibt es eine Möglichkeit, das Verhalten der Methode addChildViewController mit dem Interface Builder neu zu erstellen?
Ich habe nicht viel Dokumentation darüber gefunden, hier ist ein alter ungelöster Beitrag zum Thema: Ссылка
Ohne die addChildViewController-Beziehung richtig einzurichten, wird keine der Rotationsmethoden an meinen Kind-View-Controller weitergeleitet, hier wo meine Frage herkommt.
Das habe ich in IB gemacht:
Das erste "View" -Objekt in dem Bild ist die Ansicht meines übergeordneten View-Controllers, stattdessen ist die hervorgehobene "View" die Ansicht des Child-View-Controllers ("Item View Controller").
Der Container-Controller behält seine untergeordnete Instanz auch durch ein zusätzliches IBOutlet:
%Vor%Danke
Update 1: Wenn ich die Eltern / Kind-Beziehung in viewDidLoad des Container-Controllers manuell festlege, werden alle Rotationsmethoden korrekt an das untergeordnete Element weitergeleitet.
%Vor%Aber ich weiß nicht wirklich, ob dies der richtige Weg ist, denn ich möchte alles mit IB machen.
Update 2: Dank @micantox für seinen Hinweis, die "Container-Ansicht" in der Objektbibliothek zu verwenden, habe ich meine xib-Datei in ein Storyboard umgewandelt und jetzt wird der Child-View-Controller hinzugefügt das übergeordnete Element, also muss ich es nicht manuell mit addChildViewController aus dem Code hinzufügen, und die Rotationsmethoden werden wie erwartet weitergeleitet.
"Container View" implementiert im Grunde das embed segue und wird nur von iOS 6 unterstützt.
Dies ist ein aktualisierter Screenshot von meinem Storyboard:
Die richtige Methode zum Erstellen von Containeransichten für untergeordnete Ansichtscontroller ist die Verwendung des Objekts "Containeransicht" in der Objektbibliothek. Wenn Sie einen in die Szene Ihres View-Controllers ziehen, wird eine neue Szene für den Child-View-Controller erstellt, die separat vom übergeordneten View-Controller verwaltet werden kann.
Wenn Sie außerdem versuchen, einen eingebetteten Übergang zu einem vorhandenen Ansichtscontroller in Ihrem Storyboard zu erstellen, ziehen Sie den Mauszeiger bei gedrückter Strg-Taste von der Containeransicht und nicht von der Container-VC auf die VC, die Sie einbetten möchten.
Eine sehr einfache Möglichkeit besteht darin, den Child-View-Controller durch Referenzieren seiner Storyboard-ID zu instantiieren:
%Vor%Auf diese Weise können Sie beide View-Controller im Interface Builder erstellen. Sie können die Storyboard-ID im Interface Builder festlegen: Wählen Sie den View-Controller aus, und im Identity Inspector wird ein Feld angezeigt.