2017-12-29 26 views
0

私はナビゲーションスタック上にあるビューコントローラAを持っています。 モーダルユーザーがCIでボタンを押したときに順番にモーダル別のコントローラCにモーダルビューコントローラを一度に閉じるにはどうしたらいいですか?

を提示することができ、別のコントローラBは、どのように私はBとCの両方を消すことができますA. に戻るには、CとBの両方を却下したい提示すぐに?

以下のコードは動作しますが、これは安全ですか?

let p = self.presentingViewController 
    self.dismiss(animated: true) { 
     p?.dismiss(animated: true, completion: nil) 
    } 
+0

ストーリーボードを使用している場合は、 'unwind segue'を使用することができます。例えばhttps://cocoacasts.com/how-do-unwind-segues-work/を見てください。 – kiwisip

+0

@kiwisip良い提案だけど申し訳ありませんが、BとCはA以外のいくつかのコントローラからも表示できることは言及していないので、いくつかの巻き戻しが必要で、Cは最初にBがどこから提示されたかを知る必要がありますちょっと混乱するかもしれない。だから、私はCが自分自身で行うことができるものを探しています(あるいは、Bも解雇に関与しなければならない場合はCとB)。 – Gruntcakes

+1

presentingViewControllerを直ちに却下することができます。提示されたすべてのViewControllerを閉じる必要があります。 –

答えて

0

最上位のビューコントローラをプロパティにします。 Bが、Cの最上位ビューコントローラを設定していることを確認してください。

class C: UIViewController { 

    var topmostViewController: UIViewController? 

    @IBAction func dismiss(_ sender: Any) { 
     // If topmostViewController was not set, then assume 
     // the presenting view controller is to be dismissed. 
     (topmostViewController ?? presentingViewController)?.dismiss(animated: true) 
    } 

} 

これにより、どのView Controllerが非表示になるかを柔軟に判断できます。

関連する問題