[iOS,iPhone,iPad,Objective-C]孫のモーダルダイアログから親Viewまで戻る方法

StoryBoardを使用してUIを構築している場合で確認しました。

親ビューからモールダイヤログを開き、そのダイアログから更にモーダルダイアログを開いている場合で、何かしらのユーザーアクション時に、一気に親ビューまで戻りたい時がありました。

通常は、モーダルビュー内で、以下のように親ビューに戻れます。


[self dismissViewControllerAnimated:YES completion:nil];

2段を一気に戻りたい場合は、
まずは、delegateメソッドを実装して、親ビューのメソッドを呼び出せるようにします。
(この方法は色々なサイトに書いてあるので省略します)

ここで、普通に、viewWillDisappearで


[delegate hogeHoge];

などと、親のモーダルビューのメソッドを呼びだし、そこで、


[self dismissViewControllerAnimated:YES completion:nil];

と書いてもエラーが出て動きません。

Attempt to dismiss from view controller … while a presentation or dismiss is in progress!

などとエラーが表示されで1枚しか戻りません。
(閉じている途中に閉じれないよ!という意味のエラー)

なるほど、ここで安直にアニメーションをOFFにしてもダメですw

以下の方法で動作します。


    [self dismissViewControllerAnimated:YES completion:^{
            if([delegate respondsToSelector:@selector(hogeHoge:)]){
                [delegate hogeHoge:param1];
            }else{
                NSLog(@"hogeHogeメソッドが未実装!");
            }
    }];

※1枚目のhogeHogeでも上記と同じ事をします。

completionはその為にあったのか!
と勝手にナットクしましたが、もっとスマートな方法もあるのかもしれません。

返信を残す

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