restricciones parental olvide eliminar desactivar control como codigo apple activar iphone objective-c uiviewcontroller ios7 childviewcontroller

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]; } ];