Storyboardを分割して管理する方法
Storyboardを分割して管理する
iOS開発の画面遷移管理はおおまかに 1.Storyboardをそのまま使う 2.一つのViewControllerにつき一つのxibファイル 3.機能ごとにStoryboardを切り分けて管理 の3つがあると思う。
1.は通常のやり方で教科書等ではこのやり方が書いてある しかし、複数人で開発を行う場合、1.のやり方はほぼない。 2.のやり方は前回書いたので、今回は3.のやり方についてまとめていく。
サンプルとして背景が青いView郡と背景が赤いVeiw郡を別々のStoryboardで管理するアプリを作っていく まず、プロジェクトをSingleViewApplicationで作成。
いつものようにMainStoryboardを削除し、
Main Interfaceも空欄にしておく
ViewControllerを作成。xibは不要。
Storyboardの追加
名前はこんな感じでつけるとSPBlue.storyboardファイルとして出来上がる
作成したstoryboardファイルを選択すると空なので、ViewControllerを置く 設置したViewControllerに対して設定を記述
最初のViewControllerにはis initial ViewControllerにチェックが必要なので注意。
忘れると実行時にApplication tried to present a nil modal view controller on target で落ちる。
チェックをつけるといつもの矢印が左側に付く
同様にSPRedも作成
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が呼ばれて初期表示される
初期表示ができたところで、遷移を追加する 青 -> 水色 -> 赤 ->青という遷移をStoryboardを切り替えながら行う
青 -> 水色は通常のStoryboard開発と同様にNavigationControllerをつけて、segueで遷移する
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を切り替えながら開発できる。