iOS
UINavigationController
Swift

[Swift]UINavigationControllerでpopとpushを同時にしたい

More than 3 years have passed since last update.

もしかしたら簡単な方法があるのかもしれないが詰まったのでメモ。

UINavigationControllerであるView上でpopしてpushしたい状況があった。
どういうことかと言うと、

firstViewController
 -> viewController1 <- 今ここ

から、

firstViewController
 -> viewController2 <- 次ここ

というように移動したい。普通にpushすると、

firstViewController
 -> viewController1
  -> viewController2 <- 次ここ

となってしまい、標準のNavigationCotrollerによる戻り先が変わってくる。
言い換えると、viewController1からViewController2に移動するのだが、NavigationBarの戻るボタンではfirstViewControllerに戻って欲しい。

単にsetViewControllersを使えば解決した。

UIViewController1.swift

let ViewController2: UIViewController  = ViewController2()
let rootViewController = self.navigationController?.viewControllers.first as UIViewController
self.navigationController?.setViewControllers([rootViewController, ViewController2], animated:true)

現在のViewControllersを取り出して、変えたい部分だけ取り替えてsetViewControllersで移動。
もしもっと簡単なやり方あれば教えて下さい。。

※本当の目的はviewCotroller2からfirstに戻ることなので、初めは戻るボタンをカスタマイズしてやろうと試行錯誤したが、デフォルトの戻るボタンが使えない?&戻るボタン用の画像探すの面倒だったので断念した。
※ちなみに、普通にViewController1からpop(animated:false)してすぐpushしても、popだけで止まってしまった。