1

4 つのビュー/タブを持つ UITabBarController があります。各ビューは UINavigationController です。

これらの UINavigationControllers の 1 つで popToRootViewController を実行してから、タブを切り替えて、アニメーション全体を使用して viewController を別の UINavigationController にプッシュするにはどうすればよいですか?

したがって、シーケンスは次のようになります。

最初は、UINavigationController であるタブ 1 のビューにいます。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

これが私がやった方法です。ルート VC に関係のないコードを感染させるよりも、はるかにクリーンだと思います。

UINaviationController に残っている UIViewController の数をチェックする UINaviationControllerDelegate を作成しました。1 つしか残っていない場合は、stackAtRoot 通知を送信します。一方、 popToRootViewController の直前に、この通知によってトリガーされる Command を登録します。トリガーされると、タブの切り替えと新しいタブの UINavigationController への VC のプッシュを調整します。すぐにコマンドの登録を解除するため、再登録しない限り再度呼び出されることはありません。

于 2012-05-08T16:46:57.547 に答える
0
  1. 現在 UITabBar コントローラーに表示されているナビゲーション コントローラーの rootview コントローラーにポップします。
  2. プログラムでタブを変更する
  3. プログラムで新しいタブのナビゲーション コントローラーにビュー コントローラーをプッシュします。

これはすべて、アプリケーションのデリゲート実装ファイルを通じて行う必要があります。

コードも必要な場合はお知らせください...

于 2012-05-08T12:40:09.863 に答える