2015-04-17 16 views
11

Sto provando a creare un flusso di visualizzazione dinamico che utilizza UIContainerViews per ospitare UIViewControllers. UIContainerViews (o UIViewControllers) devono essere aggiunti programmaticamente a UIView per consentire più affiancati.Posso creare un UIContainerView programmaticamente?

Mi sono guardato intorno, ma non riesco a trovare alcun costrutto che possa essere utilizzato per creare il mio UIContainerView.

C'è un modo semplice per fare questo o è contro le normali linee guida per la creazione di viste riutilizzabili?

Per riassumere, voglio ottenere qualcosa di simile:

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

È possibile aggiungere le visualizzazioni degli altri ViewControllers al "ContainerView" e controllare le viste a livello di programmazione. – Eendje

+0

@JacobsonTalom Ho preso in considerazione questo, ma mi chiedo se non ci sarebbe alcun ritorno. Se ad esempio eseguissi azioni su UIViewController una volta che sono state "aggiunte", non causerebbe qualche incongruenza o problemi se gli UIViewControllers non vengono effettivamente aggiunti alla vista? – Chackle

+1

Bene, come ha detto Simon McLoughlin nella sua risposta: dovresti anche aggiungere ViewControllers come figli ecc. (Vedi la sua risposta). Se vuoi un esempio in swift, posso postare un esempio per te. – Eendje

risposta

17

Un UIContainerView è solo un modo visivo per aggiungere un viewController come un bambino di un altro e l'impostazione dei suoi limiti.

È possibile farlo programmaticamente aggiungendo il secondo viewController come figlio del primo, prendendo la vista del secondo e posizionandola da qualche parte sulla prima vista.

Qualcosa del genere;

childVC = [[SomeViewController alloc] init]; 

[self addChildViewController:childVC]; 

[self.view addSubview:childVC.view]; 

[childVC didMoveToParentViewController:self]; 
+1

Se vengono eseguite azioni sul riferimento childViewController, le gestirà correttamente? Ad esempio, un metodo presentController, nonostante non sia fisicamente parte dell'interfaccia utente in quanto solo la proprietà .view è stata aggiunta? – Chackle

+5

@Chackle tutte le interazioni saranno gestite dalla logica all'interno di 'SomeViewController'. Funziona come se entrambi i viewControllers fossero sullo schermo contemporaneamente, indipendentemente l'uno dall'altro. Se l'utente scorre una scrollView sul genitore, verrà notificato al genitore, se l'utente scorre una scrollView sul bambino, il childVC verrà avvisato. L'unica differenza è che il genitore deve gestire il ciclo di vita del childVC –

+0

Grazie per la spiegazione. Molto utile! – Chackle