В качестве обзора у меня возникают проблемы с UINavigationController внутри UITabBarController, вызывающим viewWillAppear всякий раз, когда представление извлекается из стека.
Из делегата программно создается UITabBarController:
// 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];
Мой newsFeedNavigationController - это просто подкласс UITableViewController (и подкласс не мешает viewWillAppear, так как он никогда не вызывается в newsFeedNavigationController). В нем элементы, которые при нажатии будут помещать новый UIViewController в стек.
Проблема в том, что всякий раз, когда представления выталкиваются из стека, viewWillAppear никогда не вызывается в newsFeedNavigationController, а элементы в списке остаются выделенными. Я возился с этим в течение нескольких часов, и теперь мне нужна помощь, чтобы выяснить, что я делаю неправильно.
В моем newsFeedNavigationController я пытался добавить NSLog, чтобы увидеть, вызывается ли он или я что-то сделал, но он никогда даже не вызывается.
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"is viewWillAppear called?");
[super viewWillAppear:animated];
}
Изменить:
Хорошо, теперь вот что-то странное, что я заметил:
Если я бегу:
[self presentModalViewController:(any UIview) animated:YES];
и затем отклонить его, viewWillAppear начинает работать должным образом, когда появляются и нажимают представления ... Так что теперь я в тупике. На самом деле это не решение, а, возможно, внутренняя часть того, что происходит.