iphone - uinavigationbar ios
popviewcontroller no está llamando a viewWillappear (2)
Estoy usando el siguiente código para mostrar la vista anterior cuando un usuario hace clic en un botón
[self.navigationController popViewControllerAnimated:YES];
En la vista anterior, sobrescribo viewWillAppear para inicializar algunas cosas. Sin embargo, parece que no se está llamando a viewWillAppear. Puse NSLog en viewDidload, viewWillAppear, viewDidAppear y solo se llama a viewDidAppear. ¿Es este comportamiento normal? En caso afirmativo, ¿qué evento debo anular para poder hacer mi inicialización? Gracias.
Según lo solicitado -viewWillAppear para la vista anterior
- (void)viewWillAppear:(BOOL)animated{
NSLog(@"ViewWillAppear");
//[[GameStore defaultStore] resetGame];
[self setHangmanImage];
NSLog([[[GameStore defaultStore] selectedList] label]);
[labelListName setText:[NSString stringWithFormat:@"List Name: %@", [[[GameStore defaultStore] selectedList] label]]];
[labelCurrentIndex setHidden:YES];
[labelCurrentWord setHidden:YES];
[[self navigationController] setNavigationBarHidden:NO];
[FlurryAnalytics logEvent:@"GameViewController - viewWillAppear"];
[self getNewQuestion];
NSLog(@"ViewWillAppear finish");
[super viewWillAppear:YES];
}
Configuro el UINavigationalController en el delegado de la aplicación usando el siguiente código
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
HomeViewController *hv = [[HomeViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:hv];
// You can now release the itemsViewController here,
// UINavigationController will retain it
[hv release];
// Place navigation controller''s view in the window hierarchy
[[self window] setRootViewController:navController];
[navController release];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
ACTUALIZAR
No sé qué pasó, pero anoche, después de intentar ejecutar la aplicación una vez más en el simulador y aún teniendo este problema, decidí guardar todo y apagar mi computadora porque se estaba haciendo tarde.
Esta mañana volví a encender mi computadora, abrí xcode, limpié el proyecto, lo construí y lo ejecuté y el problema se solucionó y se llama a -viewWillAppear. No cambié nada y está funcionando. Añadí NSLog en -willShowView y no se llama. No sé por qué de repente se está llamando a viewWillAppear.
Acabo de resolver un problema de la misma manera y después de algunas pruebas descubrí que llamar a popViewControllerAnimated: en un bloque (desde una respuesta de red en AFNetworking) no se llama a viewDidAppear en la vista principal. La solución que funcionó para mí aquí fue llamarlo en el hilo principal.
dispatch_async(dispatch_get_main_queue(), ^{
// If not called on the main thread then the UI doesn''t invoke the parent view''s viewDidAppear
[self.navigationController popViewControllerAnimated:YES];
});
Asegúrese de que el delegado de su controlador de navegación esté configurado y luego use esta función para llamar a viewWillAppear en la clase cuya viewWillAppear desea llamar:
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[self viewWillAppear:animated];
}