2017-09-04 1 views
1

UINavigationControllerの以前のView Controllerを変更することは可能ですか?ナビゲーション表示された代わりに別のView Controllerに戻る

UINavigationControllerに埋め込まれている3つのビューコントローラ(A、B、C)があるとします。 AのボタンをタップするとBに移動し、BのボタンをタップするとCにプッシュされます。ユーザーがCの戻るボタンをタップすると、Bの代わりにAに直接リダイレクトします。

+0

は質問をするために最初にあなたのコードを示しています。 –

+0

コードを読む必要はありません:https://stackoverflow.com/questions/44513291/retrieving-stack-of-viewcontrollers-when-segueing-programatically/44513322#44513322 –

+0

@ Gagan_iOS。Code.itは不要ですexample.soで説明することができるので、チェックするコードが必要な理由は何ですか? –

答えて

1

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 
     } 
} 
+0

charmのような仕事をしています。ありがとうございます。 –

1

確かに -

self.navigationController?.popToViewController(viewControllerA, animated: true) 

詳細については、documentationを参照してください。

this SO questionをチェックして、戻るボタンと組み合わせる方法を確認してください。

+0

これも機能しました。これを使用するには、戻るボタンをカスタムの戻るボタンに変更するか、戻るボタンのアクションを変更する必要があります。ユーザーが元に戻る場合は、2番目のView Controllerが表示されるためです。 –

2
let arrViewControllers: [Any]? = self.navigationController?.viewControllers 
    for controller: Any in arrViewControllers! { 
     if (controller is cVC) { 
      self.navigationController!.popToViewController(controller as! UIViewController, animated: true) 
     } 
    } 
0

それはあなたの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:) 
関連する問題