まいまいワークス

主にiPhoneアプリの開発で考えた事、調べた事、感じた事などを記していきます。

モーダルビューの背後のナビゲーションコントローラー, タブバーコントローラーを操作する

モーダルビューを閉じる際に背後のナビゲーションコントローラーやタブバーコントローラーを操作する場合、 親ビューに通知を飛ばして画面遷移、タブ切換えの操作をしてもいいのですが、記述が分散したり、モーダルが複数のビューから呼ばれる可能性がある場合は途端に処理が煩雑になってきます。

こんなときは[self presentingViewController]を使って呼び出し側の操作をする事ができます。

背後にナビゲーションコントローラーがいる場合

    hogeViewController *hoge = [hogeViewController new];
    UINavigationController *nav = (UINavigationController *)[self presentingViewController];
    [nav pushViewController:hoge animated:YES];
    
    [self dismissViewControllerAnimated:YES completion:nil];

背後にタブバーコントローラーがいる場合

    UITabBarController* tab = (UITabBarController*)[self presentingViewController];
    [tab setSelectedIndex:1];
    
    [self dismissViewControllerAnimated:YES completion:nil];

これで、通知の記述やモーダルを呼び出し側の画面遷移のメソッド等を書かなくてもいいのですっきりとしましたね。