質問: モーダルビューと以前のナビゲーションコントローラのビューを同時にポップしますか? 私はGoogleやスタックオーバーフローでこれに似た何かを発見していない... 私がしようとしているのは、モーダルビューと前のビューを同時にポップすることです。たとえば、カレンダーアプリを見てください。 '`編集`'画面で「`イベントの削除`」を選択すると、カレンダー表示に戻ります。 modalで提示された '`編集`'画面と、`イベント` '画面(ユーザーがカレンダーイベントを表示しているところ)がポップされます。私が抱えている問題は、モーダルビューをポップする方法を知っているということですが、同じ `UIViewController` サブクラス(この例では `Edit` >モーダルではないビューをポップするにはどうすればよいですか? 通常のようにモーダルビューをポップアップし、 `NSNotification` を( `Event` )画面の `UIViewController` サブクラスにポストすることを考えていましたそのビューをポップするように指示します。 もう1つのことは、アニメーションの場合は、 `popViewControllerAnimated` アニメーション(スライド左)ではなく、 `dismissModalViewControlAnimated` アニメーション(スライドダウン)でなければなりません。 *ありがとうございます。* *また、こちらよりも優れたソリューションを探しています。これは私の(少なくとも `popViewControllerAnimated` ではない)*
回答: modal "parent"にモーダル・ビュー・コントローラー(アニメーション化された:NO)を破棄し、それ自体をスタックからポップする(アニメーション化:はい)ようにするには、デリゲート・パターンを使用する必要があります。 これはまさにカレンダーアプリで起こることです。イベントの削除を確認すると、ナビゲーションバーのタイトルに何が起こるか注意してください。そのビューがポップされているときに、タイトルが「編集」から「イベントの詳細」に素早く変わるのを見ることができますナビゲーションスタックから外に出てください。 したがって、簡単に言えば、あなたのモーダルビューコントローラでカレンダーアプリについて話していたら、 `didConfirmEventDeletion` のようなメソッドを使ってプロトコルを作成してください: ``` @protocol ModalViewDelegate - (void)didConfirmEventDeletion; @end @interface ModalViewController... @property (nonatomic, assign) id delegate; @end ``` そして実装: ``` @implementation ModalViewController - (void)deleteEventMethod { ... if ([self.delegate respondsToSelector:@selector(didConfirmEventDeletion)]) [self.delegate didConfirmEventDeletion]; } ``` 親ビューコントローラで、それ自体をモーダルの代理人として宣言し、 `didConfirmEventDeletion` を実装します。 ``` - (void)didConfirmEventDeletion { [self dismissModalViewControllerAnimated:NO]; [self.navigationController popViewControllerAnimated:YES]; } ``` PS:メモリからこのコードを書きましたが、いくつかのタイプミスがあるかもしれません...