Storyboardの使いすぎに注意
iOS6時代から続いているiPad向けアプリにおいて Storyboardを全面的に使用していたのですが、そのまま増築を進めてきたために Storyboard がスパゲッティになってしまってなかなかツライ状態になっていました。
確かに Storyboard を使うことでモックアップを早く作れるようになり、デモ等でもたいへん役に立ったのですが、そのまま製品版に移行してしまったのは反省点です。Storyboard が最大になったのときは下記のような感じでした。(内容については加工しています)
ここまで作っても大丈夫なんだね!という負荷テストみたいな状態になっておりますが、幸いにも入り組んでいる部分にはほとんど改修が入らなかったのでどうにかやり過ごしておりました。
救世主 Storyboard Reference 登場
Storyboard Reference 自体はすでにiOS8.0から使用可能になっていたということで遅きに失した感が大きいのですが、頻繁にバージョンアップできない事情もあり、今頃になって使ってみることにしました。
下記のサイトを参考にさせていただきました。
【Xcode】Storyboard Referenceを活用してみた – Qiita
Storyboard Referenceを使ってみた – Qiita
iOS8以降で使える機能ということで、Storyboard ファイルの Build for を iOS8.0 and Later に設定する必要があります。
今回のケースでは iPad 専用アプリなので Use Trait Variations はオフにしました。また、Safe Area Layout Guides もオフにしてあります。
アプリの新規作成段階では、下記のような感じで Storyboard Reference を作成します。
1.新しい Storyboard を作成します。(File→New→Storyboard)
注意点としては、Storyboard の起点となる ViewController には「Is Initial View Controller」のチェックを付けておきます。
2.呼び出し元になる Storyboard に Storyboard Reference を作成します。
3.Storyboard Reference のプロパティを開き、1.で作成したStoryboard のファイル名を指定します。
注意点としては、3.で指定する参照先はファイル名で指定しますので、Storyboard のファイル名を変更してしまうと参照が外れてしまいます。
4.Storyboard Reference に向かうセグエを作成し、普通のセグエと同様に設定します。
プログラムからの使い勝手としては、Storyboard が別れていても普通の Storyboard と変わらない感じでした。セグエは通常一方通行で、戻るときは dismiss か pop で戻ってきますので、戻るときも不都合はありませんでした。
既存の Storyboard を分割する
さて、冒頭に紹介したような、むちゃくちゃ作り込まれた Storyboard の場合には、指定した部分を自動的に新しい Storyboard に切り出してくれる機能があります。
切り出したい ViewController を複数選択してから、メニューの Editor → Refactor Storyboard を選択します。
ファイル名等を入力する画面が表示されますので、ファイル名を入力します。
そうすると、新しい Storyboard ファイルが作成され、元の Storyboard には新しい Storyboard への Reference が作成され、セグエ等の接続も保持された状態で作成されます。
新しい Storyboard への入り口が1つの場合は、Is Initial View Controller のチェックが付いた状態で作成され、2つ以上の場合は View Controller の ID が指定されたセグエが作成されるようです。
Storyboard の切り出しを何度か練習した後、下記の方針で Storyboard の分割を行いました。
1.複数の画面から呼び出されるポップアップ等を先に切り出す。
2.フローが行き止まりになるグループを切り出す。別の View Controller や、上流側の View Controller に遷移するフローがあるグループは対象外とする。
Storyboard Reference を連続してたどることについては、メニューの Refactor Storyboard を使っている限り大丈夫そうでした。
MainStoryboard から切り出せるグループを追い出した結果、下記のような感じになりました。新しく作成した Storyboard ファイルは11個になりました。
これでも View Controller は多いほうだと思いますしセグエも入り組んでいますので好ましい状態とは言えないと思いますが、多少は軽くなり効率的に修正できるようになりました。
0件のコメント