2010-01-06 12 views
6

Tengo un problema increíblemente frustrante que parece ser un error, pero me cuesta mucho creer que nadie más se ha encontrado con esto. El controlador de vista raíz de mi aplicación es un UITabBarController, donde cada pestaña es un UINavigationController. Todo funciona bienUINavigationController setViewController: animated: dificultades de la barra de navegación

Ahora he llegado a un lugar donde quiero editar la pila, por lo que reorganizar el viewControllers del mando de navegación actual y luego hacer:

[self.navigationController setViewControllers:newViewControllers animated:YES]; 

La pila se extrae correctamente/empujados a la Controlador de vista superior, pero la barra de navegación no se actualiza al controlador de vista actual y parece permanecer exactamente como lo hizo con ViewController antes del pop. Si lo hago:

[self.navigationController popToViewController:someViewController animated:YES]; 

Todo funciona a la perfección. ¿Alguien ha encontrado esto antes? ¿Hay alguna solución? Algo que estoy haciendo mal?

+1

¿Este error - http://openradar.appspot.com/7470644 parece relacionado? – Anurag

+0

¡Sí! Es exactamente el mismo error, pero esa solución es bastante fea. ¿Has encontrado una mejor solución? – beinstein

+0

Obtengo este error también. Muy frustrante. –

Respuesta

2

Apple parece haber arreglado esto en el más nuevo SDK

+1

No, no se corrigió en Xcode 7.2.1 al menos. – turingtested

+0

con Xcode 9.0 también me enfrento al mismo problema. ¿Es esto un error? – damithH

1

Dos trabajos igualmente desagradables.

En primer lugar, Si:

[self.navigationController popToViewController:someViewController animated:YES]; 

funciona bien, trate de empujar a un viewcontroller extra en la pila y luego llamar a:

[self.navigationController popToViewController:someViewController animated:NO]; 

Lo que significa que debe llegar a la vc que desee sin ningún tipo de animación .

En segundo lugar,

Antes de la pila, establecer el leftButtonBarItem = nil; Eliminación efectiva del botón del controlador de vista anterior. De hecho, si el título es incorrecto, cámbialo también.

Ninguno de los dos está exactamente limpio, pero puede obtener los resultados deseados.

0

Usted también puede configurar el controlador de vista raíz como el delegado del UINavigationController como:

@interface YourViewController : UIViewController <UINavigationControllerDelegate> { 

y luego en el método delegado didShowViewController establece manualmente los controladores de vista disponibles:

-(void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated { 
    [[viewController navigationController] setViewControllers:[[viewController navigationController] viewControllers]]; 
} 

Avisadme si esto funciona en tu entorno

-2
[self.navigationController setViewControllers:newViewControllers animated:NO]; 

esto puede ayudarle.

4

Me enfrenté al mismo problema, parece que Apple no ha corregido ese error y, como resultado, la respuesta seleccionada de este hilo parece ser incorrecta. Logré corregir este problema usando this bug report como en el comentario de Anurag combinado con el comentario de Scott Pfeil.

Aquí está el código:

navController.navigationBarHidden = YES; 

NSArray* viewControllers = navController.viewControllers; 
UIViewController* currentController = [viewControllers objectAtIndex:viewControllers.count-1]; 

NSArray *controllers = [NSArray arrayWithObjects: viewController , currentController , nil]; 

[navController setViewControllers:controllers animated:NO]; 

navController.navigationBarHidden = NO; 

que llamo este código en el viewDidLoad del currentController y lo que hice es reemplazar los controladores anteriores sólo con viewController.

Espero que esto ayude.

+2

Al establecer la barra de navegación como oculta y luego mostrarla solucionó esto por mí. –

Cuestiones relacionadas