How to disable back button in navigation bar

As of today it is not possible to disable the back button using the enabled property. The backBarButtonItem property will be nil unless you create a custom item and even then it will ignore the enabled property. There are a couple (non-satisfactory) ways around this.

Hide the button

This is what Apple wants you to do given that they ignore the enabled property. It is as simple as

navigationItem.hidesBackButton = true  

and should be the preferred approach unless you have good reasons.

Disable and Tint the Navigation Bar

You can disable user interaction on the whole navigation bar and tint it to make the back button appear disabled.

navigationController?.navigationBar.isUserInteractionEnabled = false
navigationController?.navigationBar.tintColor = UIColor.lightGray

This does, unfortunately, affect other elements in the navigation bar as well so it might not be an option if, for instance, you have another bar button item on the right side.

Use a Custom Left Bar Button Item

The leftBarButtonItem does not ignore the enabled property so you could create a custom item and trigger the pop manually when it is activated.

navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(ThisClass.backButtonTapped))
...
navigationItem.leftBarButtonItem?.isEnabled = false

func backButtonTapped() {
    self.navigationController?.popViewController(animated: true)
}

This will, however, not have the back bar button style with the leading triangular indicator.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)