1

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

如何在其中一个 UINavigationController 上 popToRootViewController 然后切换选项卡并将 viewController 推送到另一个 UINavigationController 上使用动画?

所以顺序是:

一开始我们在 Tab 1 的视图中,它是一个 UINavigationController。一个 View 已被推送到它的根 ViewController 之外。

-Tab 1
   - UINavigationController1
      - RootViewController1
      - SomeViewController1 [We are here]

-Tab 2
   - UINavigationController2
      - RootViewController2

在 SomeViewController1 中点击了一个按钮,导致以下情况:

  1. UINavigationController1 弹出到它的根视图控制器(带动画)
  2. UITabBarController 将选项卡切换到 Tab2
  3. SomeViewController2 被推送到 UINavigationController2 上(带动画)

所以视图看起来像这样:

-Tab 1
   - UINavigationController1
      - RootViewController1

-Tab 2
   - UINavigationController2
      - RootViewController2
      - SomeViewController2 [We are here]
4

3 回答 3

1
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];                
         }
}
于 2012-05-08T12:51:37.740 回答
0
  1. 弹出到您当前在 UITabBar 控制器中显示的导航控制器上的 rootview 控制器
  2. 以编程方式更改选项卡
  3. 以编程方式将 viewController 推送到新选项卡的 navigationController 上

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

如果您也需要代码,请告诉我...

于 2012-05-08T12:40:09.863 回答
0

这是我的做法。我觉得这比用不相关的代码感染根 VC 要干净得多。

我创建了一个 UINaviationControllerDelegate 来检查其 UINavigationController 上剩余的 UIViewController 的数量。如果只剩下一个,它会发布一个 stackAtRoot 通知。同时,就在我 popToRootViewController 之前,我注册了一个由该通知触发的命令。当它被触发时,我让它协调选项卡切换并将 VC 推送到新选项卡的 UINavigationController 上。它会立即取消注册命令,因此除非重新注册,否则不会再次调用它。

于 2012-05-08T16:46:57.547 回答