È possibile effettuare questa operazione a livello di codice, di seguito è il metodo che avrà un valore bool di prendere decisioni che View Controller devono essere aggiunti nella visualizzazione contenitore e poi sarà un'istanza di un oggetto e dopo che aggiungerà al containerView
- (void)addViewControllerToContainerView:(BOOL)addVC1
{
// Get storyboard
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"<name of storyboard>" bundle:[NSBundle mainBundle]];
UIViewController *viewController = nil;
if (addVC1)
{
// get viewController with identifier
viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 1 Identifier>"];
}
else
{
viewController = [storyBoard instantiateViewControllerWithIdentifier:@"<View Controller 2 Identifier>"];
}
// lets add it to container view
[viewController willMoveToParentViewController:self];
[self.view addSubview:viewController.view];
[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];
// keep reference of viewController which may be useful when you need to remove it from container view, lets consider you have a property name as containerViewController
self.containerViewController = viewController;
}
Quando è necessario rimuovere view controller dal controller della vista contenitore che si può fare questo
[self.containerViewController willMoveToParentViewController:nil]; // 1
self.containerViewController.view removeFromSuperView];
[self.containerViewController removeFromParentViewController];//this line is updated as view is removed from parent view cotnroller istead of its viewcontroller is removed from parentViewController
self.containerViewController = nil
Apple docs su controller di vista container
fonte
2015-08-23 12:01:47
Grazie per la risposta completa. Sfortunatamente non funziona come immaginavo. Innanzitutto, devo abilitare un 'UIViewController' all'interno di un' UIView' della radice 'UIViewController'. Questo riempie l'intera vista. In secondo luogo, se lo aggiungo come sottoview di 'UIView' (invece dell'intera vista VC), non è conforme ai vincoli di layout automatico come se fosse incorporato nello storyboard. –
Questo approccio è realizzabile ed è per questo che esiste il concetto di controller di visualizzazione figlio e padre, quando si aggiungerà un controller di visualizzazione come controller di visualizzazione figlio si otterranno tutti gli altri metodi del ciclo di vita chiamati in child vc, e sicuramente anche AutoLayoutWill funzionerà . –
Ho aggiunto il link a Apple docs che descrive come implementare i controller di vista contenitore –