2012-01-26 4 views
0

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

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. 

Я posted issue to github repo из briancolins, но до сих пор нет ответа.

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

- (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]; 
    } 
} 

UPDATE: этот вопрос не воспроизводится в iOS5, но присутствует в прошивкой 4.3

ответ

0

Как вы указали. 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. 

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

+0

Я понял. Это была ошибка в BCTabBarController. Был массив childViewController. Если он был представлен - viewwillAppear не отправляет. – Yanny

+0

Спасибо! Вместо этого я использую ответы на селектор – Yanny

Смежные вопросы