StoryBoardでSegueを使った簡単な画面遷移

UITableViewを使いを表示してセルがタップされたら詳細画面に遷移。詳細画面からは一覧画面に戻れるナビゲーションができるような遷移です。
Master-Detail Applicationのテンプレート使うと一瞬で作ってくれるのですけども何が起きてるかよくわからないので自分で作ります。

Master-Detail Applicationってこれです。
f:id:arcright:20140903165411p:plain

作り方

1. プロジェクト作成

SingleViewApplicationのテンプレート使って作成します。
f:id:arcright:20140903165549p:plain

2. StoryBoardでNavigationControllerを追加

デフォルトでViewControllerが1つあると思うんですがこれは詳細画面に使おうと思うのでそのままで、ObjectLibraryからNavigationControllerを追加します。TableViewControllerもおまけでついてきます。
f:id:arcright:20140903170258p:plain

追加されたらNavigationControllerをInitialViewControllerにします。
f:id:arcright:20140903172718p:plain

3. TableViewControllerに対応したClass作成

StoryBoardに追加した物をソースコードで操作するには関連付けが必要なんです。今回はUITableViewControllerのサブクラスを作成します。

ProjectNavigatorのディレクトリを右クリック>NewFileを選択。
f:id:arcright:20140903171101p:plain
f:id:arcright:20140903171259p:plain
まあこんな感じでMasterTableViewControllerという名前で作ります。

4. 関連付け

TableViewControllerを選択した状態でIdentityinspecterのCustomClassに先ほど作ったMasterTableViewControllerを設定します。
f:id:arcright:20140903171746p:plain

5. UITableViewにデータを表示

UITableViewにデータを表示してみます。MasterTableViewController.mを編集します。UITableViewControllerのサブクラスとして作っているのでメソッドの雛形が書かれているはずです。
1つセルがあればいいので両方1にしてwarningを消します。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return 1;
}

続いてcellForRowAtIndexPathでセルの設定をします。なんでもいいのでhogeと表示します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.textLabel.text = @"hoge";
    
    return cell;
}

Identifierを設定しておく必要がありますのでUITableViewCellのIdentifierに"Cell"を設定します。
f:id:arcright:20140903175127p:plain
シミュレータを起動するとこんな感じになります。
f:id:arcright:20140903172924p:plain

6. Segueを設定

下記の通りドラッグアンドドロップするとウィンドウが表示されますのでpushを選択するとSegueができます。
f:id:arcright:20140903173448p:plain

SegueにIdentifierを設定します。Segueを選択した状態でAttributesInspecterから設定します。Hogeにしときます。
f:id:arcright:20140903173631p:plain

7. セルを選択した時の動作

MasterTableViewController.mにdidSelectRowAtIndexPathを実装します。これはセルをタップした際に呼ばれます。
先ほど設定したIdentifierを指定してperfoemSegueWithIdentifierを使います。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [self performSegueWithIdentifier:@"Hoge" sender:self];
}

完成

f:id:arcright:20140903173926p:plain
f:id:arcright:20140903173937p:plain

感想

難しいですね。