StoryBoardで途中のViewからnavigationControllerを使いたい場合


アプリ全体をナビゲーションコントローラーで管理していてもモーダルビューを使いたい時にモーダルビューはナビゲーションバーやツールバーが使えなくて不便。なのでナビゲーションコントローラをかませることでそれらを利用できる。

StoryBoardを組み合わせる時のやり方がわからなくて少し嵌ったので解決方法をメモ。

StoryBoardでナビゲーションコントローラを使うときはXcodeのメニューのEditorからEmbedinを使うと便利です。こうして出来たナビゲーションコントローラをコードから取得する方法がわからなかった。

以下のメソッド内でidentifierで切り分けたあとにナビゲーションコントローラーを生成してsegue.destinationViewControllerで取得できる。取得したナビゲーションコントローラーから呼び出したいViewControllerを取得できる。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:@"exportView"]) {
        UINavigationController *navigationController = segue.destinationViewController;        
        CCMExportViewController *exportViewController =[[navigationController viewControllers] objectAtIndex:0];
        exportViewController.delegate=self;
    }
}

今回は呼び出したモーダルビューのデリゲートをセットしても、表示されたビューコントローラーのdelegateにセットされておらず、そもそも取得してるビューコントローラーを表示されてるビューコントローラーが違うことに気づいて解決出来ました。

segue.destinationViewControllerにはStoryBoard上で見えるViewControllerが入っているのですね。こう考えれば取得の仕方はこう書くというのは分かるのですが、辿りつけなかった。ニンニン。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です