2

我有一个包含 5 个选项卡的选项卡栏控制器,每个选项卡栏项目都有单独的导航控制器,例如: 在此处输入图像描述 在此处输入图像描述

现在,如果我目前在Tab3中的navigationctrller3viewctrller3中,并且我想以编程方式导航到Tab1中的navigationctrller1viewctrller2 。我还以编程方式选择了特定的Tab1 但我无法到达navigationctrller1viewctrller2。这可行吗?,如果可以,请详细说明..请大家携手..!

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

最后一行应该重新排列导航控制器的 viewControllers 以便 viewctrller2 现在是顶视图控制器。

于 2012-11-02T06:38:57.970 回答
0

实现这一目标的一种方法是

  1. 在设置 tabbar 的 SelectedIndex 之前,您在 appDelegate 中维护一个引用变量,并为其分配选项卡选择后需要导航的类的名称。
  2. 在标签栏控制器的代表中:
    • (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 检查可见控制器的类是否与在 appdelegate 引用变量中设置的类名相同?如果是,则无事可做,如果不是,则检查该控制器是否在导航堆栈中?如果它在堆栈中,则弹出/推送到该索引控制器,否则创建该控制器并推送到它。
于 2012-11-02T07:19:18.267 回答
-1

我认为这不会有任何问题。假设您的 nav1 是第一个 navigationController。

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

它必须为你工作。

于 2012-11-02T06:34:13.510 回答
-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 回答