So erstellen Sie eine Container / Kind-Viewcontroller-Beziehung im Interface Builder

7

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:

  1. Ziehen Sie ein "View Controller" -Objekt aus dem Bedienfeld "Object Library" in das Bedienfeld "Objects"
  2. , und ziehen Sie es dort ab
  3. im Identity Inspector Ich habe seine Klasse in meine UIViewController-Unterklasse ("Items View Controller")
  4. geändert
  5. hat den View-Ausgang mit dem Controller verbunden
  6. hat alle anderen erforderlichen Ausgänge mit dem Controller verbunden (Listenname, Tabellenansicht)

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:

    
ggould75 13.05.2013, 08:47
quelle

3 Antworten

18

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.

    
micantox 13.05.2013, 13:24
quelle
2

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.

    
Joe Regan 05.12.2013 18:51
quelle
0

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.

    
inorganik 28.04.2015 17:45
quelle