はじめに
Storyboard Reference
は、他のStoryboardを参照してStoryboardを分割できるものです。
Segueで異なるStoryboard間をつなげることもできます。
アプリの画面数が増えてくると、1つのStoryboardに収めて管理するのは厳しいです。
Storyboard画面を頻繁に拡大縮小するのはかなり煩わしいです (私はノートパソコンなので特に、、、)。
個人開発でさえこのように感じるのであれば、チーム開発では尚更であることは想像に容易いです。
本記事では、Storyboard Referenceを使用して、Storyboardを分割する手順を簡単にまとめてみました。
環境
[Xcode] Version 12.4
[Swift] Version 5.3.2
[iOS] 14.4
[MacOS] 10.15.7
今回作成するサンプル
下図のようなシンプルな画面遷移アプリを想定します。
各タブごとにStoryboardを (赤、青、緑に)分割し、最終的には同じ画面(紫)に遷移できるようにします。
Storyboard Referenceを作成する
Storyboardを分割する際、以下の2パターンの状況が想定できます。
- すでに同じStoryboard内で画面遷移が完成しており、その状態からStoryboardを切り分ける
- 最初からStoryboardを分けて作成する
本記事では、1の方法を行います。
最後に紫画面への参照を作るときのみ2でやってみます。
まず、切り分けたい画面を複数選択し、[Editor
] > [Refactor to Storyboard...
]をクリックします。
切り分けるStoryboard名 (今回はRed.storyboard)と、そのファイルを入れるフォルダ (Group)を選択して[Save
]をクリックします。
「Storyboard
」フォルダなんかを作ると良いかもしれません。ファイルを選択して右クリック
> [New Group from Selection
]でフォルダを作成できます。
他の画面 (青、緑)も同様に切り分けると、メインのStoryboardは以下のようになります。
切り分けたStoryboardを見てみると、紫画面へのSegueが切れています。これは後で繋ぎ直す必要があります。
また、Storyboardの最初の画面には、「Attributes inspector
」の「is initial View Controller
」にチェックを入れておく必要があります。
以上で完了です。
次に、紫画面のStoryboardを2
の方法で分割して画面遷移できるようにします。
まず、新しいstoryboardファイルを作成します (ファイル名はPurple.storyboardにしておきます)。
ViewControllerを作成します。
あとは遷移元のStoryboardでStoryboard Reference
を作成するだけです。
[Attributes inspector
]の「Storyboard
」に紐付けたいStoryboard名を入力します。
今回は画面遷移させたいだけので、Storyboard ReferenceにSegueを繋いで完了です。
[補足] TabBarのアイコンやタイトルを変更する
Storyboard Referenceを用いてStoryboardを分割したとき、TabBarのアイコン等をどこで変更するのか少し迷ったので補足します。
初めは、TabBarControllerの方で設定すると思っていたのですが、titleやimageを変更しても反映されませんでした。
参照先のStoryboardの親ViewControllerで設定すると反映されるようです。
正しく反映されていました。
最後に
今回、初めてStoryboardを分割してみましたが、非常に簡単であり、Storyboardも管理しやすくなりました。
個人的には、まず1つのStoryboardで画面遷移を作成し、最後に切り分けていく1の方法が効率的と感じました。
より良い方法があれば教えていただけると幸いです。
参考文献
以下の情報を参考にさせていただきました。