Jako przegląd mam problemy z UINavigationController wewnątrz widoku wywołującego UITabBarController ViewWillAppear za każdym razem, gdy widok jest wyskakiwany ze stosu.Problemy z UINavigationController wewnątrz UITabBarController, viewWillAppear nie nazywane
Od delegata, A UITabBarController jest programowo:
// 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];
Moja newsFeedNavigationController jest tylko podklasy UITableViewController (i podklasa nie zakłóca viewWillAppear, ponieważ nigdy się nazywa w newsFeedNavigationController). W nim elementy, które po kliknięciu popchną nowy UIViewController do stosu.
Problem polega na tym, że za każdym razem, gdy widoki są wyskakiwane ze stosu, viewWillAppear nigdy nie jest wywoływane w newsFeedNavigationController, a elementy na liście pozostają podświetlone. Robiłem sobie z tym problem przez kilka godzin w punkcie, w którym potrzebuję pomocy, aby dowiedzieć się, co robię źle.
W moim newsFeedNavigationController, próbowałem dodać NSLog, aby zobaczyć, czy jest on wywoływany lub zrobiłem coś, ale nigdy nie jest nawet wywoływany.
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"is viewWillAppear called?");
[super viewWillAppear:animated];
}
Edit:
Dobra, tu jest coś dziwnego zauważyłem:
Jeśli biegnę:
[self presentModalViewController:(any UIview) animated:YES];
a następnie jej oddalenie, viewWillAppear zaczyna działać poprawnie kiedy wyskakuje i popycha widoki ... Więc teraz jestem zaskoczony. To naprawdę nie jest rozwiązanie, ale może coś z tego, co się dzieje.
Jestem zdezorientowany. W swoim wpisie powiedziałeś "UINavigationController wewnątrz kontrolera UITabBarController", a podczas Twojego działania powiedziałeś "UITabBarController wewnątrz kontrolera UINavigationController" ... który? Ponieważ mam identyczny problem z kontrolerem Nav jako kartą w kontrolerze paska kart ... który, jak rozumiem, powinien być obsługiwany. Ale ViewDidAppear zaczyna działać dopiero po przedstawieniu widoku modalnego z jednego z widoków przekazanych do kontrolera nawigacyjnego. Bardzo dziwny. – Steve
Zobacz moją odpowiedź na ogólne rozwiązanie tego problemu. – titaniumdecoy
To było tak samo jak mój problem. Przepraszam za zamieszanie. To, co początkowo miałem, to kontroler UINavigationController z kontrolerem widoku, a następnie ekran "home" zawierałby w zasadzie to, co zasadniczo było kontrolerem UITabBarController w stosie. Następnie możesz wrzucić nowy widok do stosu. Np. UINavigationController z widokiem logowania jako root, po wejściu na platformę uitabbar, a widoki z tabeli można wepchnąć do "głównego" nav. Mój problem polegał na tym, że viewWillAppear nie był przekazywany na stos (przechodziłby od UINavigationController do UITabBarController, ale nie do widoku paska zakładek). – Dandy