Irohabook
0
952

Swiftで画面遷移(push)はコード、遷移後の画面はストーリーボードで作る方法とよくあるエラー

画面遷移そのものはストーリーボードを使わないが、画面はストーリーボードのオートレイアウトで作るという場合、いくつか注意点がある。

  • 画面遷移のコードで、pushの対象はストーリーボードのインスタンスを使わないといけない→ストーリーボードのインスタンスを使わないと遷移後の画面が黒くなる
  • 画面のストーリーボードはStoryboard IDを設定する

コード例:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let v = storyboard.instantiateViewController(withIdentifier: "TestViewControllerID") as! TestViewController
rootViewController?.navigationController?.pushViewController(v, animated: true)

以下は上のコードの補足説明。

まずUIStoryboardのインスタンスを作る

引数のnameには、画面のストーリーボードのファイルを指定する。ただしstoryboardという拡張子はいらない。

ストーリーボードはだいたいMain.storyboardに入るが、プロジェクトが大きくなればstoryboardは自然に分割される。もし画面のストーリーボードがHotel.storyboardというファイルに入っているなら

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

となる。

instantiateViewControllerのwithIdentifierには、ストーリーボード上で設定したStoryboard IDを指定する

Storyboard IDを使うときは、必ずストーリーボード上でUse Storyboard IDにチェックをつける。

as!以降でViewControllerクラスを指定するが、これは単にUIViewControllerでかまわない。つまり

let v = storyboard.instantiateViewController(withIdentifier: "TestViewControllerID") as! UIViewController

でもいい。データの受け渡しをする場合は画面のクラス名を指定したほうがいい。

次の記事

システム・環境