Я столкнулся с некоторым проблемным поведением в моем NavigationController. У меня есть несколько UINavigationControllers в моем TabBarController (4 вкладки, чтобы быть конкретным). МОЙ AppDelegate соответствует UITabBarControllerDelegate, который я использую для запуска popToRootViewController при переключении вкладки, поэтому, когда пользователь заходит на эту вкладку, он снова оказывается в rootViewController. Все работает нормально с этим, за исключением: после «возврата» на эту вкладку viewWillAppear последнего загруженного viewController вызывается перед загрузкой жизненного цикла rootView.
Моя реализация Delegate выглядит следующим образом:
#pragma -mark TabBarController
///////////////Pop our navigationControllers to the rootView when Tab is changed////////////////////////////////
- (void) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) viewController {
if ([viewController isKindOfClass:[UINavigationController class]]) {
NSLog(@"******POP TO ROOT VIEW*******");
[(UINavigationController*)viewController popToRootViewControllerAnimated:NO];
}
}
Теперь я понимаю, что метод делегата - didSelectViewController, но есть ли способ предотвратить это поведение. Было бы неплохо сделать что-то, что делало бы * Deselect * ViewController, но это не предоставляется API. У меня действительно не может быть неправильного вызова viewWillAppear, потому что я запускаю многопоточный процесс там. Есть предложения?