UINavigationController в UITabBarController проблемы с жизненным циклом представления - PullRequest
0 голосов
/ 25 марта 2012

Я столкнулся с некоторым проблемным поведением в моем 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, потому что я запускаю многопоточный процесс там. Есть предложения?

1 Ответ

1 голос
/ 25 марта 2012

Эквивалент отмены выбора можно получить, реализовав shouldSelectViewController: и ответив ДА:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {

    UIViewController *currentVC = tabBarController.selectedViewController;
    // whatever you would like to do on deselect, like
    [currentVC popToRootViewControllerAnimated:NO];
    // it will be at the root when you get back to it, and as a bonus, you have
    // a handle to viewController, which is about to be selected

    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...