忍者ブログ

[PR]

2017年11月24日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ストーリーボードとは

2012年10月10日
久々の更新です。最近のXcodeで使える機能としてストーリーボードというものがあります。今回はそれについて書いてゆきたいと思います。

これまでの状態では、画面のデザインをInterface Builderで作って、画面の移動などを行うのは全てコードを書いて行っていました。多くの場合は現在の画面から他の画面へ移る際には、現在の画面のNavigationControllerに対してpushViewController:animated:を送るという具合です。

 

    [self.navigationController pushViewController:controller animated:YES];

 
これで今の画面が左へとスクロールし、新しい画面へと移動させていました。ストーリーボードではこれらの動きをInterface Builder側で見える形にして扱う事ができます。例えばあるTableViewControllerのセルをタップして、次のTableViewControllerにスクロールする場合には、Interface Builder側では以下のような操作をします。
 
  1. Interface Builder側で移動元のセルを選択状態にしておきます。
  2. Controlキーを押しつつ、移動先のTableViewControllerまでマウスカーソルをクリックしたままでドラッグし、クリックを終了します。
  3. マウスカーソルの右下にメニューが出るので、Selection Segueの項目のpushを選びます。
  4. ViewController間が矢印で接続されるので、矢印中央のマークをクリックし、Attributes inspectorを表示します。
  5. Identifierに任意の名前をつけます。StyleがPushになっているのを確認します。

実際に画面の移動が行われる時には、移動元のViewControllerのメソッドファイル内にあるprepareForSegue:sender:が呼ばれます。そこで移動先のViewControllerに対して必要な情報(タップされたセルの示すデータオブジェクトなど)を渡します。下はその一例で、選ばれたセルの行番号(0以上のNSInteger型変数)を渡しています。移動先のViewControllerはUIStroryboardSegueのdestinationViewControllerで取得出来ます。画面内にボタンを配置して、そのボタンを押したらセルをタップした時とは別の画面(設定画面など)に遷移させる、といったような拡張が容易にできるように、先ほど上で設定したidentifierの名前で条件分岐させるようにしていますが、拡張の予定が無いならif文で分岐させる必要はありません。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    if ([[segue identifier] isEqualToString:@"pushToSelectQuest"]) {

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        BDSelectQuestViewController *controller =

        (BDSelectQuestViewController *)[segue destinationViewController];

        [controller setSelectedAreaIndex:indexPath.row];

    }

}

なお、ストーリーボードを使いたい場合には、新規プロジェクトを作成する時にUse Storyboardsにチェックを入れてください。これでnibファイル(拡張子はxibでしたが)の替わりにstoryboadファイルが作成されます。

PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字