モーダルビューと以前のナビゲーションコントローラのビューを同時にポップしますか?

私はGoogleやスタックオーバーフローでこれに似た何かを発見していない...

私がしようとしているのは、モーダルビューと前のビューを同時にポップすることです。たとえば、カレンダーアプリを見てください。 '編集'画面で「イベントの削除」を選択すると、カレンダー表示に戻ります。 modalで提示された '編集'画面と、イベント '画面(ユーザーがカレンダーイベントを表示しているところ)がポップされます。私が抱えている問題は、モーダルビューをポップする方法を知っているということですが、同じ UIViewController サブクラス(この例では Edit >モーダルではないビューをポップするにはどうすればよいですか?

通常のようにモーダルビューをポップアップし、 NSNotification を( Event )画面の UIViewController サブクラスにポストすることを考えていましたそのビューをポップするように指示します。

もう1つのことは、アニメーションの場合は、 popViewControllerAnimated アニメーション(スライド左)ではなく、 dismissModalViewControlAnimated アニメーション(スライドダウン)でなければなりません。

ありがとうございます。

また、こちらよりも優れたソリューションを探しています。これは私の(少なくとも popViewControllerAnimated ではない)

2
UPDATE: NSNotification の送信も機能しません。さらに問題を解剖するために、 NSLog(@ "received received"); [self]のように、 View NSLog(@ ");//NSLog(@"); NSArray *コントローラは、NSLog(@ "コントローラのUIViewController * c) %@ "、[c title]);` }
追加された 著者 mr_kurrupt,

1 答え

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:メモリからこのコードを書きましたが、いくつかのタイプミスがあるかもしれません...

10
追加された
- (void)dismissModalViewControllerAnimated:(BOOL)animated は非推奨です。ドキュメンテーションによると、 dismissViewControllerAnimated:completion:を代わりに使用してください。
追加された 著者 Dan2552,
ありがとうございました。これは、あなたが[self.navigationController pushViewController:someView ...]を呼び出すときに前のビューから渡されたnavigationControllerというプロパティを最後に削除した後に機能します。このプロパティを設定すると、ナビゲーションコントローラが[イベント]画面に達するとすぐにゼロになりました。したがって、ナビゲーションコントローラスタックがポップされることはありませんでした。しかし、私は、ビューの移行が何であるべきかについては異なる考えを持っていると思います。 (カレンダー)イベントを削除すると、アニメーションが下にスライドします。私は自分のプロジェクトでそれをするとき、それは右スライドです。 <�次のコメントに続行する>
追加された 著者 mr_kurrupt,
私がアニメーションを逆に変更した場合、モーダルではYES、ポップではNO(またはモーダル/ナビゲーションアニメーションではYES/NOの他の組み合わせを行います)、アプリケーションがクラッシュします... /おそらく、2番目のビューはアニメーションを持つビューでなければならないからです。私はちょうど今推測しているD:
追加された 著者 mr_kurrupt,