icon iPhone勉強会 20111023 -storyboard時代の Interfacebuilder- (2011/11/23)
storyboardの詳細は、WWDC2011 セッションを参照

今回の資料

20111123STiDEV.pdf (UISctoryboard *)instantiateInitialViewController

UIStroyboardSegue

Push, Modal, Custom がある

大ざっと調べたところ、
Push は UINavigationController で利用、Modal は通常の画面遷移、Custom は カスタムクラスを作成して拡張、と言う感じに使い分けるようです。

Segueの呼び出し

(1) Storyboardだけで利用:prepareForSegue(2) プログラム上で利用:performSegueWithIdentifier


prepareForSegue:sender:

- 呼び出しもとcontroller が呼ばれる
- sender で状況判断
- segue

実際に確認しましたが、prepareForSegue は Storyboard で UIButton 等からDrag & Drop で Segue を作成し、トリガー時に呼ばれます(delegateメソッド)。
簡単に言えば、画面遷移だけなら prepareForSegue は使わずにノンプログラムで可能です。
Segueただし次の画面にデータを受け渡す場合は、prepareForSegue を利用します。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetailSegue"]) {
        DetailViewController *viewController = (DetailViewController *)[segue destinationViewController];
        viewController.hoge = _hoge;
    }
}
この場合ポイントは、

[self performSegueWithIdentifier:@"Segue の Identifier" sender:self];
もっと言うと、sender:self の為、そのクラス内の prepareForSegue が呼ばれます。


iOS4 までは initWithNibName して addSubView なり presentModalViewController なりして画面遷移していたが、Storyboard と Segue を利用すれば、Storyboard で一括管理でき、上記の1行だけで画面遷移できる事でしょうか?

CustomSegue

storyboard
Storyboard Segue で Style = Custom 、Segue Class に Segue クラスを設定
storyboardinitWithIdentifire:source

RelationShip

内容を別のシーン定義に
- Navigation
- TabBar

問題点

- 適切な、Segue がないとException
※try catch で対処
- コードに Segue を書くとダサい

Facebook や GMail っぽい UI

- ViewController コンテナ
親View 子Viewの切り替えを1つの View コントローラーで実現する。

- WWDC2011 Session 102 'Impleenting UIViewController Containment"
- GitHub
- 参考アプリ

didMoveToParentViewController: で切り替え
- toViewが上面に来てしまう
- 置換が目的で、元に戻す手順が無い
- viewController の view階層は自分で管理し、open/close を自分で書く必要がある。
- addSubView でなく insertSubView を利用


Static Cells TableView

固定のテーブルビューが作成可能
- delegateメソッドを未定義にしておく
- UITableView はカスタムできない

Sceneパレット

- view階層の外に置いてプログラムから利用するIBOutletを定義

User Defined Runtime Attributes

実行時に値を指定できる
- KVO を利用している
- Key Path でデータを設定