我有一个包含5个标签的标签栏控制器,每个标签栏项目都有单独的导航控制器,如:
现在,如果我目前处于 Tab3 中 navigationctrller3 的 viewctrller3 ,我想导航到 viewctrller2 以编程方式在 Tab1 中 navigationctrller1 。我还以编程方式选择了特定的 Tab1 但我无法达到 viewctrller2 的 navigationctrller1 即可。这是可行的吗?如果是的话请详细说明.. 请伙计们携手......!
答案 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)
实现这一目标的一种方法是
(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];