UINavigationController
の以前のView Controllerを変更することは可能ですか?ナビゲーション表示された代わりに別のView Controllerに戻る
UINavigationController
に埋め込まれている3つのビューコントローラ(A、B、C)があるとします。 AのボタンをタップするとBに移動し、BのボタンをタップするとCにプッシュされます。ユーザーがCの戻るボタンをタップすると、Bの代わりにAに直接リダイレクトします。
UINavigationController
の以前のView Controllerを変更することは可能ですか?ナビゲーション表示された代わりに別のView Controllerに戻る
UINavigationController
に埋め込まれている3つのビューコントローラ(A、B、C)があるとします。 AのボタンをタップするとBに移動し、BのボタンをタップするとCにプッシュされます。ユーザーがCの戻るボタンをタップすると、Bの代わりにAに直接リダイレクトします。
CのviewDidAppear
メソッドでナビゲーションコントローラのviewControllers
配列からBを削除する必要があります。
var didRemoveB = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !didRemoveB {
navigationController?.viewControllers.remove(atIndex: 1) //assuming B's index is 1
didRemoveB = true
}
}
charmのような仕事をしています。ありがとうございます。 –
確かに -
self.navigationController?.popToViewController(viewControllerA, animated: true)
詳細については、documentationを参照してください。
this SO questionをチェックして、戻るボタンと組み合わせる方法を確認してください。
これも機能しました。これを使用するには、戻るボタンをカスタムの戻るボタンに変更するか、戻るボタンのアクションを変更する必要があります。ユーザーが元に戻る場合は、2番目のView Controllerが表示されるためです。 –
let arrViewControllers: [Any]? = self.navigationController?.viewControllers
for controller: Any in arrViewControllers! {
if (controller is cVC) {
self.navigationController!.popToViewController(controller as! UIViewController, animated: true)
}
}
それはあなたのViewController BがnavigationController
override func viewWillDisappear(animated : Bool) {
super.viewWillDisappear(animated)
if (self.isMovingFromParentViewController()){
self.navigationController.viewControllers = viewControllers // your viewControllers stack
}
}
UPDATE
やポップでviewControllersのスタックを消えると変更されたときに処理することができ、多くの方法で まず可能ですルート:
self.navigationController.popToRootViewControllerAnimated()
やポップ・ビュー・コントローラ指定されたビューコントローラがナビゲーションスタックの最上位になるまで:
self.navigationController.popToViewController(:animated:)
は質問をするために最初にあなたのコードを示しています。 –
コードを読む必要はありません:https://stackoverflow.com/questions/44513291/retrieving-stack-of-viewcontrollers-when-segueing-programatically/44513322#44513322 –
@ Gagan_iOS。Code.itは不要ですexample.soで説明することができるので、チェックするコードが必要な理由は何ですか? –