2011-09-18 2 views
0

私のtabBarControllerベースのアプリケーションでは、tabA、tabB、tabCおよびtabDの4つのタブがあります。ユーザーはタブ間をジャンプできます。私の質問に今viewControllerを使用したTabBatController


- タバ、TABBとtabDは単一viewControllers
を持って - VC1、VC2とVC3

私はアプリがどのViewControllerを覚えている問題に実行しています - TABCはしかし3 viewControllersを持っていますユーザーが最後にあった、そしてユーザーがTABCをタップすると、コントロールは、ユーザーがにあった最後のビューコントローラに行くたとえば、のは、次の順序であるとしましょう:。のビューコントローラ:

  1. ユーザータバをタップtabAが表示されます
  2. ユーザータップtabD:tabDのビューコントローラーが表示されます
  3. ユーザータップtabC:ビューコントローラーvc1が表示されます。 - 代わりに私がVC1に
を表示したい VC3が示されている:TABBのためのビューコントローラが
  • ユーザーTABCをタップ示されている:いくつかのアクションをタップするには、ユーザーは、ユーザーがTABBをタップVC3
  • に取られます

    はこれまでのところ、私はTABCのVC1に以下を試してみましたが、コントロールはまったくVC1に来ていません:

    - (void) viewWillAppear:(BOOL)animated { 
         [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES]; 
    } 
    

    は、どのように私はいつもVC1をロードするためにTABCを伝えることができますか?

    よろしくお願いいたします。
    Sam。

  • 答えて

    0

    tabCのvc1への呼び出しが呼び出されない可能性があります。viewWillAppear:は、ビューがディスプレイに表示されるときにのみ呼び出されます。

    あなたはこの機能で見たいと思うかもしれません:

    - (void)tabBarController:(UITabBarController *)tabBarController 
        didSelectViewController:(UIViewController *)viewController 
    

    Link to Apple Developer docs

    と、この機能:

    - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated 
    

    Link to Apple Developer docs

    あなたはでこれを実装する場合tabBarControllerデリゲートそして上にドラッグして申し訳ありません....

    私は私が書いているものを知っている答えではない - - しかし、望んでいた答えてくれてありがとうは:@dvorak

    - (void)tabBarController:(UITabBarController *)tabBarController 
        didSelectViewController:(UIViewController *)viewController 
    { 
        if (viewController == \* tabC view controller */) { 
         [tabCViewController.navigationController popToRootViewController:YES]; 
        } 
    } 
    
    +0

    お返事ありがとうございます。私は幸運を持っていません/提案。 AppDelegateをTabBarControllerDelegateにしました。コールバック関数が呼び出されますが、次のコードを使用して、popToRootViewControllerを呼び出すことはできません。if([viewController.tabBarItem.title isEqualToString:@ "vc1"]){ \t \t NSArray * tmp = [self.tabBarController。ナビゲーションコントローラーviewController]; [self.tabBarController.navigationController popToRootViewController:YES]; } tmp配列にはviewControllerがゼロです。 – Sam

    +0

    tab3のナビゲーションコントローラを使用していますか?もしそうなら、あなたのコードは 'tabBarController'のnavagationControllerを取得しています。これは必要なものではありません。つまり、tabBarController.navigationControllerはビュー階層のtabBarControllerの上にあります。 '[self.tabBarController.navigationController popToRootViewController:YES];' – dvorak

    +0

    の代わりに '[viewController.navigationController popToRootViewController:YES];を試してください。痛みを残して申し訳ありませんが、私はまだ挫折しています。 popToRootViewControllerは私のためのトリックをしていないようです。私が疑問に思っていることは、tabCはナビゲーションコントローラです。それは、使用している3つのVC(つまりvc1、vc2、vc3)を知っています。 AppDelegateはTabBarControllerDelegateなので、どのようにそれについて知りますか? – Sam

    0

    :ユーザーはTABC、すなわちを選択する行為私が作業しているコードを表示します。

    私は提案で幸運を持っていません。 AppDelegateをTabBarControllerDelegateにしました。コールバック関数が呼び出される - しかし、次のコードを使用して、私はpopToRootViewControllerにはできませんよ。

    - (void)tabBarController:(UITabBarController *)tbController didSelectViewController:(UIViewController *)viewController { 
         NSLog(@"ViewController is <%@>", viewController.tabBarItem.title); 
         if ([viewController.tabBarItem.title isEqualToString:@"tabC"]) { 
          NSArray *tmp = [viewController.navigationController.tabBarController viewControllers]; 
          [viewController.navigationController popToRootViewControllerAnimated:YES]; 
         } 
    } 
    

    私は後に、配列内の3 ViewControllersを見ることを期待して、TMP変数内のすべてのViewControllersを収集しましたtabCの3つのVCすべてを訪問した。 tabC-> vc3からtabBを押してから、私の演習でtabCを押します。 tmp配列には、デバッガの要素がありませんでした。

    関連する問題