SwiftでのNavigationControllerの二重ポップの解決方法


この問題は、通常、以下のような状況で発生します。例えば、次のような遷移があるとします。

ViewController A -> ViewController B -> ViewController C

この状態で、ViewController CからViewController Aに戻りたい場合、通常は以下のコードを使用します。

navigationController?.popToViewController(viewControllerA, animated: true)

しかし、このコードを実行すると、ViewController Bも一緒にポップされてしまう場合があります。これは、ViewController Bがスタック上にあるためです。

  1. popToViewController(_:animated:)メソッドの代わりにpopToRootViewController(animated:)メソッドを使用する方法です。これにより、スタック上のすべてのビューコントローラが一度にポップされます。
navigationController?.popToRootViewController(animated: true)
  1. popToViewController(_:animated:)メソッドを使用する際に、ViewController Bを指定する代わりに、ViewController Aの前のビューコントローラを指定する方法です。
navigationController?.popToViewController(viewControllerA.previousViewController, animated: true)

この場合、ViewController Aの前のビューコントローラを取得するために、適切なプロパティやメソッドを使用する必要があります。