viewWillAppear не вызывается в BCTabBarController - PullRequest
0 голосов
/ 26 января 2012

У меня большой проект, где клиент хочет настроить панель вкладок. Я выбрал BCTabBarController для замены UITabbarController. После нескольких исправлений все работает нормально, но после тестирования я обнаружил одну ошибку:

ViewWillAppear, ViewDidAppear, ViewWillDisappear ViewDidDisappear methods not called in selectded view controller and not called into BCTabBarController.
This problem appears after BCTabBarController show modal controller from instance of BCTabBarController class.

У меня опубликована проблема в репозитории github брианколинов, но до сих пор нет ответа.

Вот некоторый код, где я вызываю нынешний контроллер модального вида:

    - (void) presentProperlyModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated
{
    if ([[self controllerToPresentModalFrom] respondsToSelector:@selector(presentViewController:animated:completion:)]) // For iOS 5
    {
        [[self controllerToPresentModalFrom] presentViewController:modalViewController animated:animated completion:^(){}];
    }
    else
    {
        [[self controllerToPresentModalFrom] presentModalViewController:modalViewController animated:animated];
    }
}

-(void) dismissProperlyModalViewControllerAnimated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]) {
        [self dismissViewControllerAnimated:animated completion:^(){}];
    }
    else
    {
        [self dismissModalViewControllerAnimated:YES];
    }
}

ОБНОВЛЕНИЕ: эта проблема не воспроизводится в iOS5, но присутствует в iOS 4.3

1 Ответ

0 голосов
/ 27 января 2012

Как вы указали. iOS 5 пересылает сообщения, а предыдущие версии - нет. Вот как я справляюсь с подобной ситуацией:

- (BOOL)needsMessageForwarding:(UIViewController *)vc {
    if ( [vc isKindOfClass:[UINavigationController class]] == NO)
        return YES;

    NSString *ver = [UIDevice currentDevice].systemVersion;
    if ( [ver characterAtIndex:0 < '5'] )
        return YES;

    return NO;
}

- (void) viewWillAppear:(BOOL)animated {
    ...
    if ( [self needsMessageForwarding:modalViewController] )
        [modalViewController viewWillAppear:animated];
    ...
}

// repeat pattern in the other viewWill... viewDid... functions.

В моей ситуации у меня есть список контроллеров представления, которые могут быть видны, поэтому я управляю, какой контроллер представления является видимым, и пересылаю сообщение ему.

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