Modal ViewController(MVC)を開くルートView Controller(RVC)があります。次に、MVC内をプッシュでさらにいくつかのVCに移動します。それらのVCの1つからRVCに戻るためのベストプラクティスは何ですか?
通常、私にはモーダルVCからの代理人がいて、RVCを呼び出して、モーダルを却下しますが、モーダルから離れると、それをどのように行うかわかりません。
Modal ViewController(MVC)を開くルートView Controller(RVC)があります。次に、MVC内をプッシュでさらにいくつかのVCに移動します。それらのVCの1つからRVCに戻るためのベストプラクティスは何ですか?
通常、私にはモーダルVCからの代理人がいて、RVCを呼び出して、モーダルを却下しますが、モーダルから離れると、それをどのように行うかわかりません。
コードを見ずに手助けするのは少し難しいですが、ここで暗闇の中で撮影させてください。
モーダルビュー内に表示される最初のコントローラーが、却下アクションを呼び出すためのプロトコル/デリゲートを提供すると想定します。
モーダルビュー内でUINavigationControllerを使用して、スタック上の他のビューコントローラーをプッシュすると、いつでもこのような最初のコントローラーを取得できます。
UIViewController * yourFirstController = [[[self navigationController] viewControllers] objectAtIndex:0];
// and then use your delegate to call your dismiss method
// you will need to typecast your controller based on your subclass otherwise will get warning here
if ([[yourFirstController delegate] respondsToSelector:@selector(yourCloseProtocolMethod)]) {
[[yourFirstController delegate] yourCloseProtocolMethod];
}
デリゲートは、モデルナビゲーションスタック内のUIViewControllerのプロパティである必要はないことを忘れないでください。rootviewcontrollerへの参照をデリゲートとして保持するシングルトンクラスを作成することを検討してください。そうすれば、アプリケーション内のどのクラスもそれにアクセスでき、それを必要とするすべてのUIViewControllerに継続的にパススルーする必要はありません。