2012-01-26 11 views
0

私は、顧客がタブバーをカスタマイズしたいと考えている大きなプロジェクトをしています。私はBCTabBarControllerを選択してUITabbarControllerを置き換えました。いくつかの修正後にそれが正常に動作しますが、テストの後、私は1つのバグが見つかりました: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. 

私はbriancolinsのposted issue to github repoをしましたが、まだ何の答えを持っていません。ここで

私は現在、モーダルビューコントローラを呼び出すいくつかのコード:

- (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をで再現していますが示されているようにiOSの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