2015-08-14 4 views
19

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

Подробнее в этом example project.

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

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

ответ

3

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

2

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

override func viewDidLoad() { 
     super.viewDidLoad() 

     navigationItem.hidesBackButton = true; 
    } 

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

+0

Я не хочу, чтобы скрыть это, я обновил свой вопрос. – Deny

+0

Я попробовал все возможные варианты, но его невозможно отключить кнопку «Назад». Посмотрите ссылку http://stackoverflow.com/questions/25362050/how-to-disable-a-navigation-bar-button-item-in-ios , Либо вам нужно создать пользовательскую кнопку возврата. – BKjadav

43

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

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

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

navigationItem.hidesBackButton = true 

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

Отключить и Tint панель навигации

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

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

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

Используйте кнопки пользовательского Left Bar Item

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

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

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

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

+0

Я не хочу потерять знак возврата по умолчанию и ведущий треугольный индикатор. Похоже, этого достичь невозможно. Спасибо за длинный ответ. – Deny

+1

Nav bar userInteractionEnabled = NO, похоже, не работает для меня на iOS 10? У кого-нибудь еще есть эта проблема? – Nate

-2

СВИФТ 4

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

self.btnBackNavigation.isEnabled = false 
Смежные вопросы