2011-09-27 9 views
6

używam następujący kod, aby wyświetlić poprzedni widok, gdy użytkownik jest na przyciskupopviewcontroller nie dzwoni viewWillappear

[self.navigationController popViewControllerAnimated:YES]; 

W poprzednim widzenia kliknięcie, mam nadpisać viewWillAppear do zainicjowanych kilka rzeczy. Wygląda jednak na to, że viewWillAppear nie jest wywoływany. Wstawiłem NSLog w viewDidload, viewWillAppear, viewDidAppear i tylko viewDidAppear jest wywoływany. Czy to normalne zachowanie? Jeśli tak, jakie zdarzenie należy przesłonić, aby móc przeprowadzić inicjalizację? Dziękuję Ci.

Zgodnie z wnioskiem -viewWillAppear do poprzedniego widoku

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

} 

I skonfigurowaliśmy UINavigationalController w app delegata za pomocą następującego kodu

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

UPDATE

nie wiem co się stało, ale ostatniej nocy po próbie uruchomienia aplikacji jeszcze raz w symulatorze i nadal ma thi Problem, postanowiłem wszystko zapisać i wyłączyć komputer, ponieważ robi się późno.

Dziś rano odłożyłem komputer z powrotem na otwarty kod xcode, wyczyściłem projekt, skompilowałem go i uruchomiłem, a problem został rozwiązany i wywoływana jest funkcja -viewWillAppear. Nic nie zmieniłem i nie działałem. Dodałem NSLog w -ShowView i nie zostanie wywołany. Nie wiem, dlaczego wywoływany jest nagle viewWillAppear.

+0

Po prostu z ciekawości, czy próbowałeś ręcznie wywoływać -viewWillAppear? – Ricky

+0

Jak ręcznie wywołać viewWillAppear? czy mogę to nazwać z widoku, w którym nazywam [self.navigationController popViewControllerAnimated: YES]; od? – atbebtg

+0

Tak - najlepiej byłoby umieścić '[previousView viewWillAppear: YES]' powyżej '-popViewControllerAnimated:' – Ricky

Odpowiedz

8

Upewnij delegat kontrolera nawigacyjnego zostanie ustawiony, a następnie skorzystać z tej funkcji, aby zadzwonić viewWillAppear w klasie, której viewWillAppear chcesz zadzwonić:

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [self viewWillAppear:animated]; 
} 
+0

Zrobiłem to i willShowViewcontroller nie jest wywoływana. – atbebtg

+0

to zestaw delegatów nawigatora nawigacyjnego? czy ta klasa ma w nagłówku? –

+0

Tak, próbowałem zrobić to zarówno w poprzednim widoku, jak iw widoku, który wywołuje popViewController i nie jest wywoływany w obu miejscach. – atbebtg

4

Właśnie hit problem bardzo podobnie i po niektóre testy wykryły, że wywołanie popViewControllerAnimated: w bloku (z odpowiedzi sieciowej w AFNetworking) viewDidAppear nie jest wywoływany w widoku nadrzędnym. Rozwiązaniem, które działało dla mnie tutaj, było wywołanie go w głównym wątku.

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]; 
}); 
Powiązane problemy