makoラボ

日常や勉強会や技術ネタ

プログラム側からUITabBarControllerを切り替えて、さらに画面遷移させたい時

f:id:mako_wis:20140228000303p:plain

今回やりたいこと

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で画面遷移させてみました。他の画面遷移の方法でも同じようなやり方でいけると思います。

まぁそもそもこんな画面遷移をしたいことが稀だと思いますが・・・