2015-04-17 14 views
11

Ich versuche, einen dynamischen View-Flow zu erstellen, der UIContainerViews zum Hosten von UIViewControllern verwendet. Die UIContainerViews (oder UIViewControllers) müssen der UIView programmatisch hinzugefügt werden, um mehrere nebeneinander zu ermöglichen.Kann ich ein UIContainerView programmatisch erstellen?

Ich habe mich umgesehen, kann aber keine Konstruktoren finden, mit denen ich meinen UIContainerView erstellen kann.

Gibt es eine einfache Möglichkeit dies zu tun oder widerspricht es normalen Richtlinien für die Erstellung wiederverwendbarer Ansichten?

Um es zusammenzufassen, möchte ich so etwas wie dies zu erreichen:

var containerView = UIContainerView() 
containerView.add(myViewController) 
+0

Sie könnten einfach die Ansichten der anderen ViewControllers zu Ihrem "ContainerView" hinzufügen und die Ansichten programmgesteuert steuern. – Eendje

+0

@JacobsonTalom Ich dachte darüber nach, aber ich frage mich, ob es irgendwelche Rückschläge geben würde. Wenn ich zum Beispiel irgendwelche Aktionen auf dem UIViewController ausgeführt habe, nachdem sie "hinzugefügt" wurden, würde das nicht zu Inkonsistenzen oder Problemen führen, wenn die UIViewControllers nicht tatsächlich zur View selbst hinzugefügt würden? – Chackle

+1

Nun, wie Simon McLoughlin in seiner Antwort sagte: Sie sollten auch die ViewControllers als Kinder usw. hinzufügen (siehe seine Antwort). Wenn Sie ein Beispiel in swift möchten, kann ich ein Beispiel für Sie veröffentlichen. – Eendje

Antwort

17

A UIContainerView ist nur eine visuelle Art und Weise eine Viewcontroller als Kind eines anderen gesetzt und sein Grenzen hinzuzufügen.

Sie können dies programmatisch tun, indem Sie den zweiten viewController als untergeordnetes Element des ersten Views hinzufügen, indem Sie die Ansicht des zweiten Views in die erste Ansicht einfügen.

So etwas wie das;

+1

Wenn irgendwelche Aktionen für die Referenz von childViewController ausgeführt werden, wird sie dann korrekt behandelt? Zum Beispiel eine presentViewController-Methode, obwohl sie nicht physisch Teil der Benutzeroberfläche ist, da nur die Eigenschaft .view hinzugefügt wurde? – Chackle

+5

@Chackle alle Interaktionen werden von der Logik in 'SomeViewController' behandelt. Es funktioniert so, als wären beide viewControllers gleichzeitig unabhängig voneinander auf dem Bildschirm. Wenn der Benutzer eine Bildlaufansicht auf dem übergeordneten Objekt scrollt, wird das übergeordnete Objekt benachrichtigt. Wenn der Benutzer ein Bildlauffeld auf dem untergeordneten Objekt scrollt, wird das untergeordnete virtuelle Objekt benachrichtigt. Der einzige Unterschied ist, dass der Elternteil den Lebenszyklus des Kindes verwalten muss. –

+0

Danke für die Erklärung. Sehr hilfreich! – Chackle

Verwandte Themen