以编程方式在标签栏项目之间导航

时间:2012-11-02 06:11:25

标签: iphone objective-c ios ipad uitabbarcontroller

我有一个包含5个标签的标签栏控制器,每个标签栏项目都有单独的导航控制器,如: enter image description here enter image description here

现在,如果我目前处于 Tab3 navigationctrller3 viewctrller3 ,我想导航到 viewctrller2 以编程方式在 Tab1 navigationctrller1 。我还以编程方式选择了特定的 Tab1 但我无法达到 viewctrller2          的 navigationctrller1 即可。这是可行的吗?如果是的话请详细说明.. 请伙计们携手......!

4 个答案:

答案 0 :(得分: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现在是顶视图控制器。

答案 1 :(得分:0)

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

  1. 在设置tabbar的SelectedIndex之前,在appDelegate中维护一个引用变量,并为其分配选择选项卡后需要导航的类的名称。
  2. 在tabbar控制器的委托中:
    • (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 检查可见控制器是否与appdelegate引用变量中设置的类名相同?如果是,那么无事可做,如果没有,那么检查该控制器是否在导航堆栈中?如果它在堆栈中,则弹出/推送到该索引控制器,否则创建该控制器并推送到它。

答案 2 :(得分:-1)

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

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

它必须为你工作。

答案 3 :(得分:-1)

从ViewController3执行..

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

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

            [appDelegate .tabBarController setSelectedIndex:0];