2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Swift】コードで行う画面遷移の方法

Posted at

はじめに

画面遷移をさせる際にいつもやり方を調べ直していたので、自分なりにまとめてみました。

2パターンの画面遷移

画面遷移の挙動は大きく2つあり、コードの書き方が異なります。

UINavigationControllerを使った場合

  • 横方向に遷移する
  • スワイプで移動できる
  • カメラで撮った写真を見る時のような動き
  • pushViewControllerメソッドを呼び出すことで可能になります
pushViewController
func pushViewController(_ viewController: UIViewController, animated: Bool)

ViewControllerを使った場合

  • 現在表示されている画面(view)の上に、新しい画面が重なる
  • 画面下からスーッと現れる
  • presentメソッドを呼び出すことで可能になります
present
func present(_ viewControllerToPresent: UIViewController, 
            animated flag: Bool, completion: (() -> Void)? = nil)

画面遷移の手順

遷移先のViewControllerをコードで取得する場合は、次のようなステップを踏みます。 
「MainViewController」から「ResultViewController」に遷移するやり方をまとめました。

[前提]

  • 新しいプロジェクトが作成します。
  • 遷移先の「ResultViewController」を作成します。
  • 新しく「Result.storyboard」というStoryboardを作成して、viewControllerを配置します。
    * storyboardに配置したviewControllerと「ResultViewController」を関連付けておきます。

1. 遷移先のStoryboardを取得する

まずは、遷移先のstoryboardを取得します。

let storyboard = UIStoryboard(name: "Result", bundle: nil)

引数nameの値は、遷移先のStoryboardの名前を渡します。
(今回は「Result.storyboard」なので「Result」となります)
これでstoryboardの取得ができました!

2. 取得したStoryboardからViewControllerをインスタンス化する

今度は取得したStoryboardからResultViewControllerをインスタンス化していきます。
インスタンス化するには、instantiateInitialViewControllerメソッドを使います。

guard let resultViewController = storyboard.instantiateInitialViewController() as? ResuntViewController else { return } 

または ViewControllerの「Identifier」に任意の名前を設定すれば、

let resultViewController = storyboard.instantiateViewController(withIdentifier: "Result" ) as? ResultViewController

と記載することも可能です。
(Identifierは「Result」にしています)

3. 遷移のコードを記述する

- NavigationControllerを使うパターン

流れとしては、
遷移元のViewControllerに NavigationControllerを追加

画面遷移のコードを書く という流れになります。

NavigationControllerを追加方法は2つあります。

その1
① 遷移元のViewControllerを選択する
② xcodeのツールバーの「Editor」を押す
③「Embed In」を選択
④「NavigationController」を選択すれば追加される

その2
①command⌘ + shift + L で を呼びだす
②検索欄で「NavigationController」と入力
③「NavigationController」を元のViewControllerの隣にドラッグ&ドロップ 
④2つ目のViewを削除します。
⑤「NavigationController」から元のViewへ、control + ドラッグ&ドロップでrootViewController接続をすれば追加されます。

無事、NavigationControllerが追加できたら遷移のコードを書きます。

let storyboard = UIStoryboard(name: "Result", bundle: nil)
guard let resultViewController = storyboard.instantiateInitialViewController() as? ResuntViewController else { return  } 
//↓この部分
navigationController?.pushViewController(resultViewController, animated: true)

- ViewControllerを使うパターン

こちらは前半で説明した、presentメソッドを呼び出せばOKです。

let storyboard = UIStoryboard(name: "Result", bundle: nil)
guard let resultViewController = storyboard.instantiateInitialViewController() as? ResuntViewController else { return  } 
//↓この部分
present(resultViewController, animated: true)

これで画面遷移を行うコードが書けました。
画面に配置したボタンを押した際に、画面遷移させたい時は、これらの一連のコードをメソッドにして、UIButtonのアクションメソッドの中で呼び出してあげるとよさそうです!

さいごに

初心者なりに学んだことをまとめてみました。
間違っている部分などありましたら、教えていただけるとありがたいです!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?