Como resumen, tengo problemas con un UINavigationController dentro de un UITabBarController que llama a viewWillAppear cada vez que se saca una vista de la pila.Problemas con UINavigationController dentro de UITabBarController, viewWillAppear no se llama
Desde el delegado, un UITabBarController se hace mediante programación:
// Create views for Tab Bar
UINavigationController *view1 = [[UINavigationController alloc] initWithRootViewController:[[newsFeedNavigationController alloc] initWithStyle:UITableViewStylePlain]];
resizedTabBatItem *tabBarItem1 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"newspaper.png"] tag:0];
[view1 setTabBarItem:tabBarItem1];
[tabBarItem1 release];
UIViewController *view2 = [UIViewController new];
resizedTabBatItem *tabBarItem2 = [[resizedTabBatItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"speechbubble.png"] tag:1];
[view2 setTabBarItem:tabBarItem2];
[tabBarItem2 release];
....
// Create the tab bar controller
bookTabBarController = [BookTabBarController new];
[[bookTabBarController view] setFrame:CGRectMake(0, 0, 320, 460)];
// Add the views to it
NSArray *viewControllers = [NSArray arrayWithObjects:view1, view2, view3, view4, view5, nil];
[[bookTabBarController tabBarController] setViewControllers:viewControllers];
Mi newsFeedNavigationController es sólo un UITableViewController subclase (y la subclase no está interfiriendo con viewWillAppear, ya que nunca se le llama en newsFeedNavigationController). En él, los elementos que cuando se hace clic empujarán un nuevo UIViewController en la pila.
El problema es que cada vez que se quitan las vistas de la pila, viewWillAppear nunca se llama en newsFeedNavigationController, y los elementos de la lista permanecen resaltados. He estado jugando con esto por unas horas, estoy en el punto en el que necesito ayuda para saber qué estoy haciendo mal.
En mi newsFeedNavigationController, traté de agregar un NSLog para ver si se llama o hice algo, pero nunca se llama.
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"is viewWillAppear called?");
[super viewWillAppear:animated];
}
Editar:
Bien, ahora aquí es algo raro me di cuenta:
Si me quedo:
[self presentModalViewController:(any UIview) animated:YES];
y luego descarto que, viewWillAppear comienza a funcionar correctamente cuando aparece y empuja vistas ... Así que ahora estoy perplejo. No es realmente una solución, pero tal vez algo de algo que está sucediendo.
Estoy confundido. En tu publicación dijiste "UINavigationController dentro de un UITabBarController" y en tu seguimiento dijiste "UITabBarController dentro de un UINavigationController" ... ¿cuál? Porque estoy teniendo un problema idéntico con un controlador de navegación como una pestaña dentro de un controlador de barra de pestañas ... que, según tengo entendido, debería ser compatible. Pero ViewDidAppear solo comienza a funcionar después de presentar una vista modal desde una de las vistas enviadas al controlador de navegación. Muy extraño. – Steve
Consulte mi respuesta para obtener una solución general a este problema. – titaniumdecoy
Esto fue lo mismo que mi problema. Lo siento por confundir. Lo que inicialmente tenía era un UINavigationController con un controlador de vista, y luego la pantalla de "inicio" contendría lo que esencialmente era un UITabBarController a continuación en la pila. Entonces, podrías empujar una nueva vista en la pila. Ej: UINavigationController con la vista de inicio de sesión como raíz, cuando está insertado, se insertó uitabbar y las vistas de una tabla se pueden insertar en el navegador "principal". Mi problema era que viewWillAppear no se pasaba a la pila (pasaría del UINavigationController al UITabBarController, pero no a la vista de la barra de pestañas). – Dandy