storyboardの詳細は、WWDC2011 セッションを参照
20111123STiDEV.pdf (UISctoryboard *)instantiateInitialViewController
Push, Modal, Custom がある
大ざっと調べたところ、 Push は UINavigationController で利用、Modal は通常の画面遷移、Custom は カスタムクラスを作成して拡張、と言う感じに使い分けるようです。
(1) Storyboardだけで利用:prepareForSegue (2) プログラム上で利用:performSegueWithIdentifier
実際に確認しましたが、prepareForSegue は Storyboard で UIButton 等からDrag & Drop で Segue を作成し、トリガー時に呼ばれます(delegateメソッド)。 簡単に言えば、画面遷移だけなら prepareForSegue は使わずにノンプログラムで可能です。 ただし次の画面にデータを受け渡す場合は、prepareForSegue を利用します。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetailSegue"]) {
DetailViewController *viewController = (DetailViewController *)[segue destinationViewController];
viewController.hoge = _hoge;
}
}
この場合ポイントは、
<
p class="code>Segue の identifier 判別 destinationViewController による UIViewController の取得
です。 まだ勉強したてなのであれですが、欠点としては Segue が増えた場合の管理が大変そうです。 Segue が存在しない場合に、try catch による Exceptionエラーは勿論、複数画面による条件処理ですね。実際に確認しましたが、performSegueWithIdentifier は、Styoryboard 上に Identifire 付きで Segue を作成し、プログラム上で明示的に Segue を呼び出す方法です。 プログラム上で UI を作成する場合に利用するかと思います。
[self performSegueWithIdentifier:@"Segue の Identifier" sender:self];
もっと言うと、sender:self の為、そのクラス内の prepareForSegue が呼ばれます。
iOS4 までは initWithNibName して addSubView なり presentModalViewController なりして画面遷移していたが、Storyboard と Segue を利用すれば、Storyboard で一括管理でき、上記の1行だけで画面遷移できる事でしょうか?
Storyboard Segue で Style = Custom 、Segue Class に Segue クラスを設定 initWithIdentifire:source
内容を別のシーン定義に - Navigation - TabBar
ViewController コンテナ 親View 子Viewの切り替えを1つの View コントローラーで実現する。
WWDC2011 Session 102 'Impleenting UIViewController Containment"
didMoveToParentViewController: で切り替え - toViewが上面に来てしまう - 置換が目的で、元に戻す手順が無い - viewController の view階層は自分で管理し、open/close を自分で書く必要がある。 - addSubView でなく insertSubView を利用
固定のテーブルビューが作成可能 - delegateメソッドを未定義にしておく - UITableView はカスタムできない
実行時に値を指定できる - KVO を利用している - Key Path でデータを設定