我有一个包含 5 个选项卡的选项卡栏控制器,每个选项卡栏项目都有单独的导航控制器,例如:
现在,如果我目前在Tab3中的navigationctrller3的viewctrller3中,并且我想以编程方式导航到Tab1中的navigationctrller1的viewctrller2 。我还以编程方式选择了特定的Tab1 但我无法到达navigationctrller1 的 viewctrller2。这可行吗?,如果可以,请详细说明..请大家携手..!
我有一个包含 5 个选项卡的选项卡栏控制器,每个选项卡栏项目都有单独的导航控制器,例如:
现在,如果我目前在Tab3中的navigationctrller3的viewctrller3中,并且我想以编程方式导航到Tab1中的navigationctrller1的viewctrller2 。我还以编程方式选择了特定的Tab1 但我无法到达navigationctrller1 的 viewctrller2。这可行吗?,如果可以,请详细说明..请大家携手..!
如果您当前在 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 现在是顶视图控制器。
实现这一目标的一种方法是
(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
检查可见控制器的类是否与在 appdelegate 引用变量中设置的类名相同?如果是,则无事可做,如果不是,则检查该控制器是否在导航堆栈中?如果它在堆栈中,则弹出/推送到该索引控制器,否则创建该控制器并推送到它。我认为这不会有任何问题。假设您的 nav1 是第一个 navigationController。
[self.nav1 pushViewController:view2 animated:YES];
它必须为你工作。
从 ViewController3 执行..
UINavigationController *navigationController1 = [appDelegate.tabBarController.viewControllers objectAtIndex:2]; // fetch the navigationController
[navigationController1 popToViewController:[navigationController1.viewControllers objectAtIndex:1] animated:NO];
[appDelegate .tabBarController setSelectedIndex:0];