思い立ったが吉日!

iOSが好きです。

Storyboardを分割して管理する方法

Storyboardを分割して管理する

iOS開発の画面遷移管理はおおまかに 1.Storyboardをそのまま使う 2.一つのViewControllerにつき一つのxibファイル  3.機能ごとにStoryboardを切り分けて管理 の3つがあると思う。

1.は通常のやり方で教科書等ではこのやり方が書いてある しかし、複数人で開発を行う場合、1.のやり方はほぼない。 2.のやり方は前回書いたので、今回は3.のやり方についてまとめていく。

サンプルとして背景が青いView郡と背景が赤いVeiw郡を別々のStoryboardで管理するアプリを作っていく まず、プロジェクトをSingleViewApplicationで作成。

いつものようにMainStoryboardを削除し、

f:id:watarotten:20151105214045p:plain

Main Interfaceも空欄にしておく

f:id:watarotten:20151105214051p:plain

ViewControllerを作成。xibは不要。

f:id:watarotten:20151105214325p:plain

Storyboardの追加

f:id:watarotten:20151105214702p:plain

名前はこんな感じでつけるとSPBlue.storyboardファイルとして出来上がる

f:id:watarotten:20151105214713p:plain

作成したstoryboardファイルを選択すると空なので、ViewControllerを置く 設置したViewControllerに対して設定を記述

f:id:watarotten:20151105215050p:plain

最初のViewControllerにはis initial ViewControllerにチェックが必要なので注意。

f:id:watarotten:20151105215156p:plain

忘れると実行時にApplication tried to present a nil modal view controller on target で落ちる。

チェックをつけるといつもの矢印が左側に付く

同様にSPRedも作成

f:id:watarotten:20151105215700p:plain

AppDelegateを編集

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // windowの準備
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    // storyboardを呼び出してインスタンス化
    // nameはstoryboard ID
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"SPBlue" bundle:nil];
    SPBlueViewController* blueVC = [storyboard instantiateInitialViewController];
    // rootviewに追加
    self.window.rootViewController = blueVC;
    
    return YES;
}

これでビルドするとSPBlue.storyboardが呼ばれて初期表示される

f:id:watarotten:20151105220828p:plain

初期表示ができたところで、遷移を追加する 青 -> 水色 -> 赤 ->青という遷移をStoryboardを切り替えながら行う

青 -> 水色は通常のStoryboard開発と同様にNavigationControllerをつけて、segueで遷移する

f:id:watarotten:20151105222805p:plain

SPBlueViewController.mにボタンを付けてsegueで遷移

- (IBAction)nextBlue:(id)sender {
    [self performSegueWithIdentifier:@"blueNext" sender:self];
}

水色 -> 赤 すなわちStoryboardを切り替えるところは

SPNextBlueViewController.m

- (IBAction)goToRed:(id)sender {
    // UIStoryboardのインスタンス生成
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"SPRed" bundle:nil];
    SPRedViewController* redVC = [storyboard instantiateInitialViewController];
    // modal遷移
     [self presentViewController:redVC animated:YES completion:nil];
}

赤 -> 青 でStoryboardを切り替えるところは

SPRedViewController.m

- (IBAction)goToBlue:(id)sender {
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"SPBlue" bundle:nil];
    SPBlueViewController* blueVC = [storyboard instantiateInitialViewController];
    
    [self presentViewController:blueVC animated:YES completion:nil];
}

で切り替えられる。

赤のstoryboardもis initial ViewControllerにチェックが必要なので注意。 Storyboard一個につき最初のViewControllerにチェックをつけること。

このようにして、機能ごとにstoryboardを切り替えながら開発できる。

f:id:watarotten:20151106214651g:plain