CrossBridge Lab

技術ネタ、デバイスネタを...

【Swift3】ソースコード上から Storyboard 上に配置した ViewController にアクセスする

2016/11/20 修正 本文中のコードをSwift3対応に置き換えました

はじめに

 本記事では Swift を使ってソースコード上から Storyboard 上に配置した ViewController にアクセスする方法を解説します。

ソースコードから Storyboard 上に配置した ViewController にアクセスする

1. 対象となる Storyboard をインスタンス化する

まず Storyboard を取得します。Storyboard のファイル名を指定して UIStoryboard クラスをインスタンス化します。

// 名前を指定して Storyboard を取得する(Main.storyboard の場合)
let storyboard = UIStoryboard(name: "Main", bundle: nil)

2. Storyboard のインスタンスから ViewController を取得する 

 次にインスタンス化した Storyboard から ViewController を取得します。取得する方法は2つあります。まず、「is initial view controller」が設定されている ViewController を取得する方法から。UIStoryboard クラスの instantiateInitialViewControllerメソッドを使います。

// 「is initial view controller」が設定されている ViewController を取得する
let viewController = storyboard.instantiateInitialViewController()

「is initial view controller」は名前の通り最初に表示される ViewController です。Storyboard 上で矢印マークが表示されていることで確認するか、ユーティリティエリアの attributes インスペクタで確認できます。

f:id:crossbridge-lab:20151211131826p:plain

 2つ目の方法が ViewController の Identity を指定する方法です。UIStoryboard クラスの instantiateViewControllerWithIdentifier メソッドで Storyboard 上で設定した StorybaordID を指定します。

// StorybaordID を指定して ViewController を取得する
let viewController2 = storyboard.instantiateViewController(withIdentifier: "SecondVC")

f:id:crossbridge-lab:20151211131832p:plain

まとめ

 Storyboard 上に配置した ViewController は以下の手順でアクセスすることができます。

  1. Storyboard のインスタンスを取得する
  2. instantiateInitialViewController メソッド or instantiateViewControllerWithIdentifier メソッドで所望の ViewController を取得する