bar iphone objective-c uinavigationcontroller

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