【Swift】NavigationControllerの画面遷移まとめ

どうも、猫吉(@nekokichi1_yos2)です。

 

NavigationControllerは初期状態のViewControllerとは違い、特殊な遷移を使用できます。

 

その遷移とは、

  • popViewController
  • popToViewController
  • popToRootViewController

 の3つです。

 

上記の使用方法について紹介します。

 

解説

 
popViewController:1つ前の画面に戻る(dismissと同じ)


popToViewController:指定した番号のViewControllerに遷移

(1つ目のViewControllerが起点)

(navigationController?.viewControllers[1]:2つ目のViewControllerに遷移)


popToRootViewController:1つ目のViewControllerに遷移

(RootVIewContollerって1つ目のViewControllerを指す)

 

ストーリーボード

 

f:id:nekokichi_yos2:20181213195545p:plain

(2つ前の画面に戻るは無視してください。)

 

ソースコード

 

class ViewController: UIViewController {

    @IBAction func button(_ sender: Any) {
        //NavigationControllerでも可能
        performSegue(withIdentifier: "goNextView", sender: nil)
    }
    
}

 

class SecondViewController: UIViewController {
    
    @IBAction func goNextView(_ sender: Any) {
        //StoryBoardIDを使用した画面遷移
        let storyboard = self.storyboard?.instantiateViewController(withIdentifier: "goNextView");
        self.navigationController?.pushViewController(storyboard!, animated: true)
    }
    
    @IBAction func back(_ sender: Any) {
        //dismiss(1つ前の画面に戻る)のNavigationControlelr版
        self.navigationController?.popViewController(animated: true)
    }
    
}

 

class ThirdViewController: UIViewController {
    
    @IBAction func firstback(_ sender: Any) {
        //rootViewController(1番最初の画面)から1つ先の画面(SecondViewController)に戻る(遷移する)
        self.navigationController?.popToViewController((navigationController?.viewControllers[1])!, animated: true)
    }
    
    @IBAction func rootback(_ sender: Any) {
        //rootViewControllerに戻る
        self.navigationController?.popToViewController((navigationController?.viewControllers[0])!, animated: true)
        //もしくは
        self.navigationController?.popToRootViewController(animated: true)
    }
    
}