UINavigationBarの戻るボタン

UINavigationBarの戻るボタンについてです。

色々なアプリでUINavigationBarが使われています。そして前の画面に戻る処理はほぼ必須で用意されています。野生の勘で作ろうとして失敗したので、私と同じ野生のプログラマが間違えないように失敗を書き残します。

結論

結論から言うと、UINavigationBarの画面遷移ではpresent()メソッドを使用しません!

もちろんpresentでも遷移することは可能なのですが、UINavigationBarの繊維には専用のものが用意されていてそれを使うと標準で戻るボタンが付属します!

コード

UINavigationBarの追加

appDelegateのapplication()メソッドをこのように修正

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let navigation = UINavigationController(rootViewController: ViewController())
        window?.rootViewController = navigation
        return true
    }

ViewControllerで遷移するところ

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let barButton = UIBarButtonItem(title: "•••", style: .plain, target: self, action: #selector(changeView(_:)))
        self.navigationItem.rightBarButtonItem = barButton
        
    }

    @objc func changeView(_ sender: UINavigationBar){
        let vc = SecondViewController()
        navigationController?.pushViewController(vc, animated: true)
//        present(vc, animated: true, completion: nil)
    }
}

右の画像がpushViewControllerで遷移したもので、左の画像がpresentで遷移したものです。

UINavigationBarを使うときは特別なこだわりがない限りpushViewControllerで遷移するのが良いかと思います。

遷移先のViewController

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .yellow
    }
}
デザインパターン

次の記事

Decorator