Iphone 以编程方式在选项卡栏项之间导航
我有一个包含5个选项卡的选项卡栏控制器,每个选项卡栏项目都有单独的导航控制器,如: 现在,如果我当前在选项卡3中的导航Ctrller3的viewctrller3中,并且我希望以编程方式导航到选项卡1中的导航Ctrller1的viewctrller2。此外,我还以编程方式选择了特定的选项卡1,但我无法访问的viewctrller2 导航Ctrller1。这是否可行?如果可行,请详细说明。。Iphone 以编程方式在选项卡栏项之间导航,iphone,objective-c,ios,ipad,uitabbarcontroller,Iphone,Objective C,Ios,Ipad,Uitabbarcontroller,我有一个包含5个选项卡的选项卡栏控制器,每个选项卡栏项目都有单独的导航控制器,如: 现在,如果我当前在选项卡3中的导航Ctrller3的viewctrller3中,并且我希望以编程方式导航到选项卡1中的导航Ctrller1的viewctrller2。此外,我还以编程方式选择了特定的选项卡1,但我无法访问的viewctrller2 导航Ctrller1。这是否可行?如果可行,请详细说明。。 请大家携起手来 我认为这不会有任何问题。假设您的nav1是第一个navigationController
请大家携起手来 我认为这不会有任何问题。假设您的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];
如果您当前在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];
最后一行应该重新排列导航控制器的ViewController,以便viewctrller2现在是顶视图控制器。实现这一点的一种方法是
[self.nav1 pushViewController:view2 animated:YES];
(void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController代码> 检查visible controller的类是否与appdelegate引用变量中设置的类名相同?如果是,则无需执行任何操作,如果不是,则检查该控制器是否在导航堆栈中?如果它在堆栈中,则弹出/推送到该索引控制器,否则创建该控制器并推送到它
我不确定我是否理解您的问题--您说您可以选择选项卡1,因此selectedViewController将为您提供导航控制器1,其[viewControllers objectAtIndex:1]将为您提供查看控制器2。是的,我的意思是我可以通过编程方式选择选项卡项。但是,如何直接从我的当前屏幕推送到NavigationController1的viewcontroller2您可能有一些操作方法可以从用户操作转到该屏幕。。现在,要以编程方式执行此操作,只需调用这些操作方法。。它会直接把你带到屏幕上。你看到我编辑的答案了吗?这对你有用吗?但它是动态的。我如何确保每次它都在第一导航控制器的第一个viewcontroller上?但我不会有ViewCtrler1和ViewCtrler2对象引用。@itechnician,请参阅我编辑过的答案。我认为这应该是可行的,如果导航控制器在它的导航堆栈上有你的帖子中显示的所有3个视图控制器。。只需转换UINavigationController*nav1=(UINavigationController*)tabCont.selectedViewController;您窗口的根控制器是什么?通过设置tabbarcontroller的selectedIndex,此deltegate不被调用,除非用户点击选项卡栏,否则不会调用它,然后您需要创建一个委托方法,并在以编程方式设置tab bar IndexB时调用它,但委托也是bruteforce类型的解决方案,我必须在第一个导航控制器的每个viewcontroller中检查它