画面遷移そのものはストーリーボードを使わないが、画面はストーリーボードのオートレイアウトで作るという場合、いくつか注意点がある。
- 画面遷移のコードで、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
でもいい。データの受け渡しをする場合は画面のクラス名を指定したほうがいい。