[Swift]コードで画面遷移を行う3つの方法
こんにちは、プログラマーの@Yuuです。
iPhoneアプリを作る際には必ず使うと言っても過言ではない画面遷移。
storyboardの「segue」を使って遷移させるのではなく、Swiftのコード上で画面遷移をする方法をご紹介します。
今回は以下3パターンをご紹介。
(ViewControllerと書くと長いのでこの記事では時々VCと書きます)
- 同じstoryboard上に配置したVCへの遷移方法
- 違うstoryboard上に配置したVCへの遷移方法(遷移先が初期VC)
- 違うstoryboard上に配置したVCへの遷移方法(VCのIdentifierを使用)
2番目の方法の「初期VC」というのは「Initial View Controller」と言って、storyboardを呼び出した時1番最初に呼び出すViewControllerの事です。
スポンサーリンク
共通して行う事の確認
上記3つの方法のコードは書き方に違いはありますが、やっていることは一緒で、必ず以下の3つを行います。
- 遷移先のViewControllerがあるstoryboardをインスタンス化
- 遷移先のViewControllerをインスタンス化
- 遷移先のViewControllerに遷移する
これさえ分かっていれば画面遷移は難しくありません。
では解説していきたいと思います。
解説する前に、3つの方法を紹介をするあたり遷移先のViewControllerのクラスが「NextViewController」という名前である事を前提に説明していきます。
それぞれの遷移方法
1. 同じstoryboard上に配置したVCへ遷移
以下の画像のように同じstoryboard上にある画面への遷移方法
まず、遷移先のNextViewControllerのIdentityを設定します。
storyborad上でNextViewControllerを選択
Show the Identity inspector -> Identity -> Storyboard IDに「next」と設定
画面遷移したいところに以下を記述
1 2 3 |
let storyboard: UIStoryboard = self.storyboard! let nextView = storyboard.instantiateViewControllerWithIdentifier("next") as! NextViewController self.presentViewController(nextView, animated: true, completion: nil) |
コードの解説をザックリ行うと
- 1行目で遷移したいViewControllerがあるstoryboardを指定
- 2行目で遷移先のViewControllerを指定
- 3行目で遷移を行う
となります。
今回は同じstoryboardなのでself.storyboard!
、つまり「自分自身(遷移前のViewController)がいるのと同じstoryboardだよ!」と言っているわけですね。
「あれ?てことは、ここの指定を他のstoryboardに指定すれば、他2つの方法も出来るんじゃね?」と思った人はその通りでございます。
2. 違うstoryboard上に配置したVCへ遷移(遷移先が初期VC)
以下のように2つのstoryboardがあり、それぞれにViewControllerがある場合
遷移先のstoryboard名は「Main2.storyboard」という名前で作成しました。
ここでは遷移先のViewController(NextViewController)をInitial View Controllerに設定します。
Main2.storyboardに配置されたViewControllerの
Show the Attributes inspector -> View Controller -> Is Initial View Controller
にチェックマークを付けます。
するとNext View Controllerの左側に灰色の矢印マークが付いているはずです。
これでNextViewControllerがInitial View Controllerになりました。
そして画面遷移を行うところで以下を記述
1 2 3 |
let storyboard: UIStoryboard = UIStoryboard(name: "Main2", bundle: nil) let nextView = storyboard.instantiateInitialViewController() as! NextViewController self.presentViewController(nextView, animated: true, completion: nil) |
3. 違うstoryboard上に配置したVCへ遷移(VCのIdentifierを使用)
2つのstoryboardにそれぞれViewControllerを配置
ただし、Main2.storyboardのNextViewControllerの「Is Initial View Controller」のチェックマークは外しています。
そして1番目の時にやったようにNextViewControllerのIdentityに「next」と入力します。
この状態で遷移する方法は以下のとおり
1 2 3 |
let storyboard: UIStoryboard = UIStoryboard(name: "Main2", bundle: nil) let nextView = storyboard.instantiateViewControllerWithIdentifier("next") as! NextViewController self.presentViewController(nextView, animated: true, completion: nil) |
1と2を組み合わせたような感じですね。
前の画面に戻る方法(おまけ)
遷移する方法を書いたので、おまけで遷移前のViewControllerに戻る方法も書いておきます。
以下の一文を戻りたい場面で呼び出せば遷移前のViewControllerに戻る事が出来ます。
1 |
self.dismissViewControllerAnimated(true, completion: nil) |
あとがき
理屈さえ分かってしまえば、Segueを使わなくても画面遷移は簡単ですね!
ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧