Как обзор, у меня возникают проблемы с UINavigationController внутри UITabBarController, вызывающего viewWillAppear всякий раз, когда из стека открывается стек.Проблемы с 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];
}
Edit:
Хорошо, теперь вот что-то странное, я заметил:
Если я бегу:
[self presentModalViewController:(any UIview) animated:YES];
, а затем отпустить его, viewWillAppear начинает работать правильно когда появляются и толкают взгляды ... Так что теперь я в тупике. На самом деле это не решение, а, может быть, внутри того, что происходит.
Я смущен. В своем сообщении вы сказали «UINavigationController внутри UITabBarController», и в ходе вашего последующего действия вы сказали «UITabBarController внутри UINavigationController» ... который? Потому что у меня одинаковая проблема с контроллером Nav в качестве вкладки в контроллере панели вкладок ... который, как я понимаю, должен поддерживаться. Но ViewDidAppear только начинает работать после того, как я представляю модальный вид из одного из представлений, перенаправленных на контроллер nav. Очень странно. – Steve
См. Мой ответ для общего решения этой проблемы. – titaniumdecoy
Это было то же самое, что и моя проблема. Прошу прощения за смущение. Первоначально у меня был UINavigationController с контроллером представления, а затем экран «home» содержал бы, по существу, следующий UITabBarController в стеке. Затем вы можете нажать новый вид в стек. Пример: UINavigationController с именем входа в систему с правами root, когда он был введен, uitabbar был нажат, а представления из таблицы можно было ввести в «главный» навигатор. Моя проблема заключалась в том, что viewWillAppear не передавался по стеку (он переходил из UINavigationController в UITabBarController, но не в представление панели вкладок). – Dandy