iphone - parental - Agregue el controlador de vista hijo a UINavigationController
olvide mi codigo de restricciones iphone 5 (2)
En su primer controlador de vista, haga algo como esto:
- (IBAction)buttonClick:(id)sender
{
SecondViewController *secondView = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
UIImage *blurryImage = [UIImage imageNamed:@"foo.jpeg"];
secondView.imageView.image = blurryImage;
[self.navigationController addChildViewController:secondView];
secondView.view.frame = self.navigationController.view.frame;
[self.navigationController.view addSubview:secondView.view];
}
Luego, en su segundo controlador de vista, agregue el captador para su vista de imagen:
-(UIImageView *)imageView
{
if( _imageView == nil )
{
_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 548)];
[self.view addSubview:_imageView];
}
return _imageView;
}
Estoy intentando agregar un controlador de vista hijo a un UIViewController
contenido en un UINavigationController
con este código:
- (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;
}];
}
Pero este es el resultado:
Como puede ver, UINavigatioBar
y UIToolbar
siguen en la parte superior del controlador de vista infantil. ¿Cómo puedo poner el controlador de vista infantil encima de todo? Ya he intentado reemplazar el código con:
[self.navigationController addChildViewController:viewController];
[self.navigationController.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self.navigationController];
Pero de esta forma el viewDidAppear:animated
del viewController
no se llama, no sé por qué.
El comentario de @Sam es correcto. beginApperanceTransition:animated:
llamar a beginApperanceTransition:animated:
y endAppearanceTransition
para que se viewDidAppear
. El motivo por el cual UINavigationController
no llama a viewDidAppear
cuando agrega un controlador de vista secundaria es porque ha anulado sus métodos de composición de contenedor para evitar que el programador agregue un controlador de vista secundaria en lugares extraños. En su caso, no quiere que su vista infantil cubra la barra de navegación. El uso correcto de un controlador de navegación es hacer que los niños aparezcan debajo de la barra de navegación. No obstante, puede forzar esta IU no estándar indicándole manualmente al niño cuándo está apareciendo y cuándo ha terminado de aparecer.
Agregue un hijo a UINavigationController
MyChildViewController* child = [[MyChildViewController alloc] init];
[self.navigationController addChildViewController:child];
child.view.frame = self.navigationController.view.bounds;
[self.navigationController.view addSubview:child.view];
child.view.alpha = 0.0;
[child beginAppearanceTransition:YES animated:YES];
[UIView
animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^(void){
child.view.alpha = 1.0;
}
completion:^(BOOL finished) {
[child endAppearanceTransition];
[child didMoveToParentViewController:self.navigationController];
}
];
Eliminar un hijo de UINavigationController
[child willMoveToParentViewController:nil];
[child beginAppearanceTransition:NO animated:YES];
[UIView
animateWithDuration:0.3
delay:0.0
options:UIViewAnimationOptionCurveEaseOut
animations:^(void){
child.view.alpha = 0.0;
}
completion:^(BOOL finished) {
[child endAppearanceTransition];
[child.view removeFromSuperview];
[child removeFromParentViewController];
}
];