Sto cercando di aggiungere un controller di vista bambino ad un UIViewController
contenuto in un UINavigationController
con questo codice:Aggiungere View Controller bambino a UINavigationController
- (void)buttonTapped:(id)sender
{
MyChildController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyChild"];
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self];
viewController.view.alpha = 0.0f;
[UIView animateWithDuration:0.4 animations:^{
viewController.view.alpha = 1.0f;
}];
}
Ma questo è il risultato:
Come si può vedere lo UINavigatioBar
e lo UIToolbar
sono ancora in cima al controller di visualizzazione figlio. Come posso mettere il controller della vista bambino sopra tutto? Ho già provato a sostituire il codice con:
[self.navigationController addChildViewController:viewController];
[self.navigationController.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self.navigationController];
Ma in questo modo il viewDidAppear:animated
del viewController
non viene chiamato, so perché.
Sto cercando di utilizzare l'approccio viewcontroller-contenitore perché ho bisogno di offuscare la vista della vista modale sfondo controller che è anche semi-trasparente. L'effetto è lo stesso della vista di notifica che si tira giù dalla parte superiore dello schermo. Lo sfondo è semi-trasparente ed è anche sfocato/vetro smerigliato. Perché se aggiungo un controller vista figlio a 'self.navigationController' il metodo' viewDidAppear' non viene chiamato? –
Hmm ... non è proprio sicuro ... hai provato a chiamare [viewController viewWillAppear: NO]? – JonahGabriel
Sì e non fa nulla. Ho bisogno di chiamare '[viewController viewDidAppear: NO]' subito dopo la riga '[viewController didMoveToParentViewController: self.navigationController]'. Perché diavolo non si chiamano i metodi? Altrimenti se aggiungo il controller della vista figlio a 'self' e non a' self.navigationController' funziona, ma come mostrato nell'immagine sopra la vista è 'dentro' il 'navigationController'. –