※iOS5以上での方法となります。
storyboard
まずstoryboardで起動元画面を1画面、ModalView用の2画面作成します。左から以下の名前で進めていきます。
- ViewController
- ModalView1Controller
- ModalView2Controller
ModalView1Controller
1つ目のModalViewを実装していきます。以下は ModalView1Controller.h
@protocol ModalView1ControllerDelegate
- (void)switchModalViewController:(UIViewController *)controller;
@end
@interface ModalView1Controller : UIViewController {
id<ModalView1ControllerDelegate> myDelegate;
}
@property (nonatomic, retain) id myDelegate;
- (IBAction)showModalView2Controller:(id)sender; // storyboardに配置しているボタンのイベント
@end
次に ModalView1Controller.m
// 遷移するトリガー。ここではボタンクリックにしています
- (IBAction)showModalView2Controller:(id)sender
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; // MainStoryboard_iPhone.storyboard
UINavigationController *nc = [storyboard instantiateViewControllerWithIdentifier:@"Modal2ViewController"]; // StoryboardIDを指定
[myDelegate switchModalViewController:nc];
}
ここではDelegateを使って、遷移元に次に表示したいModalViewのControllerを渡している点がポイントです。ViewController
次に1つ目の画面であるModalView起動画面を実装します。以下は ViewController.m
// 遷移直前に呼ばれる
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
ModalViewController *controller = segue.destinationViewController;
controller.myDelegate = self;
// 上記はViewControllerに対して行う処理。Navigationとかは以下みたいにする
// UINavigationController *navigationController = segue.destinationViewController;
// MangaPageViewController *controller = (id)[[navigationController viewControllers] objectAtIndex:0];
}
#pragma mark - ModalView1ControllerDelegate
- (void)switchModalViewController:(UIViewController *)controller
{
// 遷移先のModalViewを閉じて、次に表示させたいModalViewを起動
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:controller animated:YES completion:NULL];
}];
}
ポイント2つ。- 遷移する時にModalView1Controllerで実装してるmyDelegateにselfを設定しておく。
- delegateメソッドが呼ばれたら表示中のModalView1Controllerを閉じ、閉じる処理が完了したらModalView2Controllerを起動させる。


ios4で実装する方法もあるみたい。
返信削除http://codereview.stackexchange.com/questions/8924/ios4-alternatives-for-dismissviewcontrolleranimatedcompletion
いつまでサポートすべきかわからないけどね (・ω・ ;)(; ・ω・)