【Swift/iOS】Segueを使わない画面遷移

(2019/04/07 更新)

Segueを使わないで画面遷移をする方法を解説します。

異なるstoryboard上にあるViewControllerに遷移するなどの場合はSegueが使えませんので、必然的にこちらの方法を使う事になります。

尚、Segueを使った画面遷移の方法を知りたい場合は、こちらの記事を御覧ください。

【Swift/iOS】Segueを使った画面遷移
Segueとは、storyboard上で画面遷移を表す部品です。 この記事では、Segueを使った2種類の画面遷移方法を解説します。 ノンコーディングでお手軽に遷移するAction Segue コード上の任意のタイミングで画面遷移させるMa...
スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。(2019/04/07 更新)

【Xcode】Version10.2
【Swift】5.0
【iOS】12.2
スポンサーリンク

やりたい事

View1(遷移元)のNextボタンをクリックしたら、View2(遷移先)に画面遷移する処理を実装します。

図:やりたい事

スポンサーリンク

実装方法

遷移先画面のIdentity設定

遷移先画面(View2)のViewControllerを選択してIdentityのStoryboard idに任意の値を設定します。 コードから遷移先画面を指定する為の識別子ですので、storyboard内でユニークであればなんでもかまいません。

684 02 01

ここでは”view2"と設定しました。

コードの記述(View1ViewController.swift)

遷移元画面(View1)の全ソースです。 Nextボタン押下時イベントの処理に画面遷移のコードを記述します。

以降で各行を解説します。

①storyboardのインスタンス取得

遷移先画面(View2)があるstoryboardのインスタンスを取得します。今回は同じstoryboard内の画面に遷移するので、self.storyboard(=自分自身がいるstoryboard)を指定します。

遷移先画面が別のstoryboardにある場合は?

遷移したい画面が別のstoryboard(例えば”Next.storybord")にある場合は、次のようにして対象のstoryboardのインスタンスを取得します。UIStoryboardの引数”name:"にstorybord名を記述します。

②遷移先ViewControllerのインスタンス取得

先程、遷移先画面のIdentityに設定した”view2”を指定して遷移先ViewControllerのインスタンスを取得します。サンプルコードの”View2ViewController"は遷移先画面のクラス名です。

遷移先画面がstoryboardの初期画面の場合

遷移先画面がstoryboardの初期画面(Initial View Controller)の場合は、次のように記述する事で、識別子(Identity)無しでインスタンスを取得する事もできます。

③画面遷移

present()メソッドで、画面遷移を実行します。

“animated:"が”true”の場合は画面遷移のアニメーションが伴います。

アニメーションを変更する方法は、こちらの記事を参照して下さい。

【Swift/iOS】画面遷移時のアニメーション指定方法
モーダル表示タイプの一般的な画面遷移での画面表示アニメーションの指定方法を解説します。SegueのPresent Modallyを使った画面遷移、あるいはSegueを使わずにpresentメソッドで行った画面遷移がこれに該当します。
スポンサーリンク

ナビゲーションコントローラー(Navigation Controller)関係

ナビゲーションコントローラー管理下での画面遷移の場合

ナビゲーションコントローラー管理下での画面遷移の場合は、present()メソッドの代わりに、次のようにpushViewController()メソッドを使用します。

この時、present()メソッドを使用すると、ナビゲーションコントローラーの管理下からは外れて、モーダル型の画面遷移となりますので、注意して下さい。もちろん、あえてそうするのも可能です。

ナビゲーションコントローラーのトップ画面に遷移する場合

ナビゲーションコントローラーのトップ画面(rootView)に遷移したい場合、遷移先は対象のViewControllerではなくNavigationControllerを指定します。

下図のようなケースです。
【図3:NavigationControllerのトップ画面に遷移したいケース】

ViewControllerに遷移する場合と同じように識別子(Storyboard id)を指定します。

また、この場合はまだナビゲーションコントローラー管理下ではないのでpresent()メソッドを使う事に注意して下さい。

ナビゲーションコントローラーの解説は、こちらの記事を参照して下さい。

【Swift/iOS】ナビゲーションコントローラーの使い方
iOSアプリではよく見かけるNavigation Controllerの使い方を解説します。
スポンサーリンク

まとめ

  • Segueを使わない画面遷移の手順は次の通り
  1. 遷移先画面の識別子(Identity)設定
  2. 遷移先storyboardのインスタンス取得
  3. 遷移先ViewControllerのインスタンス取得
  4. present()メソッドで画面遷移
  • ナビゲーションコントローラー配下ではpresent()メソッドの代わりに、pushViewController()メソッドを使う。