2

5つのタブを含むタブバーコントローラーがあり、各タブバーアイテムには次のような個別のナビゲーションコントローラーがあります。 ここに画像の説明を入力してください ここに画像の説明を入力してください

ここで、現在Tab3navigationctrller3viewctrller3にいて、プログラムでTab1navigationctrller1のviewctrller2に移動したい場合 。また、プログラムで特定のTab1を選択しましたが、 navigationctrller1のviewctrller2 に 到達できません。これは実行可能ですか?、はいの場合は、詳しく説明してください..みんなが手を組んでください..!

4

4 に答える 4

3

現在viewctrller3を使用している場合は、次のことができるはずです。

    UITabBarController *tabCont = (UITabBarController *)[self.navigationController parentViewController];
    [tabCont setSelectedIndex:0];
    UINavigationController *nav1 = tabCont.selectedViewController;
    NSarray *newControllers = [NSArray arrayWithObjects:[nav1.viewControllers objectAtIndex:2],[nav1.viewControllers objectAtIndex:0],[nav1.viewControllers objectAtIndex:1], nil];
    [nav1 setViewcontrollers:newControllers animated:NO];

その最後の行は、viewctrller2がトップビューコントローラーになるように、ナビゲーションコントローラーのviewControllersを再配置する必要があります。

于 2012-11-02T06:38:57.970 に答える
0

これを達成する1つの方法は

  1. タブバーのSelectedIndexを設定する前に、appDelegateで1つの参照変数を維持し、タブ選択後にナビゲートする必要があるクラスの名前をそれに割り当てます。
  2. タブバーコントローラーのデリゲート:
    • (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 表示されているコントローラーが、appdelegate参照変数に設定されているクラス名と同じ種類のクラスであるかどうかを確認しますか?はいの場合は何もしません。そうでない場合は、そのコントローラーがナビゲーションスタックにあるかどうかを確認しますか?スタックにある場合は、そのインデックスコントローラーにポップ/プッシュします。そうでない場合は、そのコントローラーを作成してプッシュします。
于 2012-11-02T07:19:18.267 に答える
-1

ViewController3から実行します。

   UINavigationController *navigationController1 =       [appDelegate.tabBarController.viewControllers objectAtIndex:2]; // fetch the navigationController

            [navigationController1 popToViewController:[navigationController1.viewControllers objectAtIndex:1] animated:NO];

            [appDelegate .tabBarController setSelectedIndex:0];
于 2012-11-02T06:36:05.160 に答える
-1

これには問題はないと思います。nav1が最初のnavigationControllerであるとします。

[self.nav1 pushViewController:view2 animated:YES];

それはあなたのために働く必要があります。

于 2012-11-02T06:34:13.510 に答える