プログラム側からUITabBarControllerを切り替えて、さらに画面遷移させたい時
今回やりたいこと
FirstViewの上に置いてある「Second → Third」ボタンを押すと、SecondViewのあるタブに切り替わってなおかつThirdViewに切り替わる。
実装する
Second → Third」ボタンプログラム側でやらないといけないことは大きく2つ
- FirstViewからSecondViewのタブへの切替
- SecondViewからThirdViewへの遷移
こちらを順番に行えば実現出来るはずということで、以下がそのソースです。
// ① 2番目のタブのViewControllerを取得する UINavigationController *vc = self.tabBarController.viewControllers[1]; // ② 2番目のタブを選択済みにする self.tabBarController.selectedViewController = vc; // ③ UINavigationControllerに追加済みのViewを一旦取り除く [vc popToRootViewControllerAnimated:NO]; // ④ SecondViewの画面遷移処理を呼び出す [vc.viewControllers[0] performSegueWithIdentifier:@"ThirdViewを呼び出す" sender:nil];
① 2番目のタブのViewControllerを取得する
tabBarController内に設定されているviewControllerは今回の例だと「FirstView」と「SecondView」の2つ。遷移したい先は「SecondView」なのでそちらを取り出す。
今回は、「SecondView」はUINavigationControllerを使用しているのでそちらで取得する。「SecondView」に設定されているViewControllerじゃないので注意!UINavigationControllerを使用していなければそのまま取れます。
② 2番目のタブを選択済みにする
①で取得したViewを選択済みにします。ここはそのままなので説明は割愛。
③ UINavigationControllerに追加済みのViewを一旦取り除く
今回はpushで画面遷移するので、以前にpushされていると画面が複数呼び出される事になります。なので画面遷移を呼び出す前に「SecondView」で以前に画面遷移したものを掃除しておきます。
④ SecondViewの画面遷移処理を呼び出す
まずは、 vc.viewControllers[0] で「SecondView」のViewControllerを取得します。UINavigationControllerのrootに設定されいるので0番目を取得すればよいです。
その後、performSegueWithIdentifierで「ThirdView」への画面遷移処理を呼び出しています。
まとめ
今回の例ですと、遷移させたいViewがナビゲーション形式だったのでpushで画面遷移させてみました。他の画面遷移の方法でも同じようなやり方でいけると思います。
まぁそもそもこんな画面遷移をしたいことが稀だと思いますが・・・