7

erstellen von Code eine Eltern/Kind-Beziehung zwischen zwei View-Controller erstellen im Grunde ist es nur darum, so etwas wie tun:Wie eine Container/Kind Viewcontroller Beziehung in Interface Builder

[self addChildViewController:childViewController]; 
[self.view addSubview:childViewController.view]; 

wo Selbst ist die Elternsicht-Controller.
Aber, Was ist, wenn ich die gleiche Beziehung vollständig von Interface Builder erstellen möchte?
Oder mit anderen Worten: Gibt es eine Möglichkeit, das Verhalten der Methode addChildViewController mit Interface Builder neu zu erstellen?
ich eine Menge Dokumentation über das hat hier nicht finden, eine alte ungelöste Post über das Thema ist: https://devforums.apple.com/message/455758#455758

Ohne Einrichtung richtig die addChildViewController Beziehung, keine der Rotationsverfahren sind mein Kind-View-Controller weitergeleitet Hier kommt meine Frage her.

Dies ist, was ich in IB getan habe:

  1. Drag & Drop ein "View Controller" Objekt aus der "Objektbibliothek" Platte in die "Objekte" Panel
  2. im Identitäts Inspektoren ich habe seine Klasse meiner UIViewController Unterklasse („Items view Controller“) geändert
  3. verbunden, um die Ansicht Auslass an den Controller
  4. alle anderen erforderlichen Auslässe an den Controller angeschlossen (Listenname, Tabellenansicht)

Das erste "Ansicht" -Objekt in dem Bild ist die Ansicht meines übergeordneten Ansichtscontrollers, stattdessen ist die hervorgehobene "Ansicht" die Ansicht des Kindansicht-Controllers ("Item View Controller").

enter image description here

Der Container-Controller auch seine untergeordnete Instanz durch eine zusätzliche IBOutlet behalten:

@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController; 

Dank


Update 1: Wenn ich manuell die Eltern/Kind-Set Beziehung in ViewDidLoad des Container-Controllers sind alle Rotationsmethoden korrekt an das Kind weitergeleitet.

[self addChildViewController:self.itemsViewController]; 

Aber ich weiß wirklich nicht, ob dies der richtige Weg zu tun, das heißt, da ich alle mit IB tun möchte.


Update 2: Dank für seinen Hinweis auf @micantox die „Container-Ansicht“ in der Objektbibliothek zu verwenden, habe ich meine xib-Datei in ein Storyboard und jetzt das Kind View-Controller umgewandelt wird 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 die einbetten segue und nur diese von iOS 6.
unterstützt wird, ist ein aktualisierter Screenshot von meinem Storyboard:

enter image description here

Antwort

18

Der richtige Weg Behälter Ansichten für ein Kind zu schaffen View-Controller ist durch die Verwendung des Objekts "Container View" 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 getrennt vom übergeordneten View-Controller verwaltet werden kann.

+0

Von dem, was ich weiß, ist der Container-View-Controller nicht nur auf das iPad beschränkt, sondern auch auf dem iPhone [link] (http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html), Ich habe es in mehr als einer App verwendet. In diesem Fall möchte ich das auf dem iPad machen. – ggould75

+0

Wie auch immer, die Art und Weise, dies im Interface Builder zu tun, geschieht über das Container View-Objekt in der Objektbibliothek! So können Sie Ihr Kind verwalten View separat Controller anzeigen – micantox

+0

Vielen Dank, ich wusste nicht, die Existenz dieses Objekts, tatsächlich arbeite ich mit einer einzigen XIB-Datei statt mit einem Storyboard, und es scheint nur auf Storyboard verfügbar sein . Ich werde es versuchen ... – ggould75

2

Wenn Sie versuchen, einen eingebetteten Übergang zu einem vorhandenen Ansichtscontroller in Ihrem Storyboard zu erstellen, ziehen Sie bei gedrückter Strg-Taste von der Containeransicht und nicht vom Container-VC auf die VC, die Sie einbetten möchten.

0

Eine sehr einfache Möglichkeit, es zu tun, ist nur die Steuerung Kind Ansicht instanziiert durch seine Storyboard ID Referenzierung:

UITableViewController *childViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"childViewController"]; 

[self addChildViewController:childViewController]; 
[self.view addSubview:childViewController.view]; 

Auf diese Weise können Sie beide View-Controller in Interface Builder bauen. 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.

Verwandte Themen