Подтвердить что ты не робот

Как отключить кнопку "Назад" в панели навигации

Есть ли какой-либо официальный способ установить свойство UIBarButtonItem.enabled? Я попытался установить backButtonItem в предыдущем контроллере. Но свойство enabled игнорируется.

Подробнее в этом простом примерном проекте.

Я не хочу, чтобы какое-то решение вроде "создало свой собственный leftBarButtonItem и установил его альфа..."

Изменить: я не хочу скрывать его, отключать его только с темным цветом и отключением взаимодействия с пользователем. Это точно такое же поведение, как и для отключенных leftBarButtonItem.

4b9b3361

Ответ 1

На сегодняшний день невозможно отключить кнопку "назад" с помощью свойства enabled. Свойство backBarButtonItem будет nil, если вы не создадите пользовательский элемент, и даже тогда оно будет игнорировать свойство enabled. Есть несколько (неудовлетворительных) способов обойти это.

Скрыть кнопку

Это то, что Apple хочет, чтобы вы делали, учитывая, что они игнорируют свойство enabled. Это так же просто, как

navigationItem.hidesBackButton = true  

и должен быть предпочтительным подходом, если у вас нет веских причин.

Отключить и подкрасить панель навигации

Вы можете отключить взаимодействие с пользователем на всей навигационной панели и подкрасить его, чтобы сделать кнопку возврата неактивной.

navigationController?.navigationBar.isUserInteractionEnabled = false
navigationController?.navigationBar.tintColor = UIColor.lightGrayColor()

Это, к сожалению, влияет и на другие элементы на панели навигации, поэтому может не подойти, если, например, у вас есть другой элемент кнопки панели справа.

Использовать пользовательский элемент левой панели

leftBarButtonItem не игнорирует свойство enabled, поэтому вы можете создать пользовательский элемент и запускать всплывающее окно вручную при его активации.

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

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

Это, однако, не будет иметь стиль кнопки задней панели с ведущим треangularьным индикатором.

Ответ 2

Добавьте ниже код в свой класс ViewController2.swift.

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.hidesBackButton = true;
    }

Он скроет вашу кнопку назад.

Ответ 3

Если вы хотите скрыть его, UInavigationItem имеет свойство hidesBackButton.

Ответ 4

SWIFT 4

Сделайте @IBOutlet элемента навигации, а затем отключите его:

self.btnBackNavigation.isEnabled = false