带animation的popToRootViewController然后切换选项卡

我有一个UITabBarController 4视图/选项卡。 每个视图都是一个UINavigationController。

我怎样才能popToRootViewController在这些UINavigationControllers其中之一,然后切换选项卡,并推动一个viewController到另一个使用animation的UINavigationController?

所以顺序是:

在开始,我们在Tab 1的视图,这是一个UINavigationController。 一个View已经超越了它的根ViewController。

-Tab 1 - UINavigationController1 - RootViewController1 - SomeViewController1 [We are here] -Tab 2 - UINavigationController2 - RootViewController2 

SomeViewController1中点击一个button导致以下:

  1. UINavigationController1popup到它的根视图控制器(带animation)
  2. UITabBarController切换选项卡到Tab2
  3. SomeViewController2被推到UINavigationController2(带有animation)

所以这个视图看起来像这样:

 -Tab 1 - UINavigationController1 - RootViewController1 -Tab 2 - UINavigationController2 - RootViewController2 - SomeViewController2 [We are here] 

 int tabYouWantToSelect=2; BOOL isNavigation=YES; [[self.tabBarController selectedViewController].navigationController popToRootViewControllerAnimated:YES]; //if any controller is presented as a model view then //[[self.tabBarController selectedViewController] dismissModalViewControllerAnimated:YES]; [self.tabBarController setSelectedIndex:tabYouWantToSelect]; //the newly pushed view controller's viewWillAppear -(void)viewWillAppear:(BOOL)animated { if(isNavigation){ [self.navigationController pushViewController:objAddLocation animated:YES]; } } 
  1. popup到当前在UITabBar控制器中显示的导航控制器上的rootview控制器
  2. 以编程方式更改选项卡
  3. 以编程方式在新选项卡的navigationController上推送viewController

所有这些都应该通过应用程序委托实现文件来实现。

如果你需要的代码,以及让我知道…

这是我如何做到的。 我觉得它比用与其无关的代码感染根代码要干净得多。

我创build了一个UINaviationControllerDelegate,它检查UINavigationController上留下的UIViewController的数量。 如果只剩下一个,它会发布stackAtRoot通知。 同时就在我popToRootViewController之前,我注册了一个由此通知触发的命令。 当它被触发时,我将它编排到标签页开关,并将一个VC推到新标签页的UINavigationController上。 它立即取消注册该命令,所以除非重新注册,否则不会再被调用。