2015-08-14 37 views
19

Esiste un modo ufficiale per impostare la proprietà UIBarButtonItem.enabled? Ho provato a impostare un backButtonItem nel controller precedente. Ma la proprietà enabled viene ignorata.Come disattivare il pulsante Indietro nella barra di navigazione

Più in questo semplice example project.

io non voglio un po 'di soluzione come "fare il proprio leftBarButtonItem e impostare il suo alpha ..."

Edit: io non voglio nasconderlo, solo disattivarlo con il colore grigio e utente disabilitato interazione. È esattamente lo stesso comportamento di disabilitato leftBarButtonItem.

risposta

3

Se si desidera nasconderlo, UInavigationItem ha una proprietà hidesBackButton.

2

Aggiungi il codice seguente nella classe ViewController2.swift.

override func viewDidLoad() { 
     super.viewDidLoad() 

     navigationItem.hidesBackButton = true; 
    } 

Nasconde il pulsante Indietro.

+0

Non voglio nasconderlo, ho aggiornato la mia domanda. – Deny

+0

Ho provato tutte le opzioni possibili ma non è possibile disabilitare il pulsante Indietro guarda il link http://stackoverflow.com/questions/25362050/how-to-disable-a-navigation-bar-button-item-in-ios , O è necessario creare il pulsante Indietro personalizzato. – BKjadav

43

A partire da oggi non è possibile disattivare il pulsante Indietro utilizzando la proprietà enabled. La proprietà backBarButtonItem sarà nil a meno che non si crei un elemento personalizzato e anche in questo caso ignorerà la proprietà enabled. Ci sono un paio (non soddisfacenti) di modi per aggirare questo problema.

nascondere il pulsante

Questo è ciò che Apple vuole che tu faccia dato che ignorano la proprietà enabled. È semplice come

navigationItem.hidesBackButton = true 

e dovrebbe essere l'approccio preferito a meno che non si abbiano buone ragioni.

Disabilitare e Tinta la barra di navigazione

È possibile disattivare interazione con l'utente su tutta la barra di navigazione e la tinta per fare il pulsante Indietro apparire disabilitato.

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

Ciò, purtroppo, influenzano gli altri elementi nella barra di navigazione e quindi potrebbe non essere un'opzione se, ad esempio, si dispone di un altro elemento pulsante della barra sul lato destro.

utilizzare un pulsante personalizzato barra di sinistra Articolo

Il leftBarButtonItem non ignora la proprietà enabled modo si potrebbe creare un elemento personalizzato e attivare manualmente la comparsa quando viene attivata.

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

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

Questo, tuttavia, non ha lo stile del pulsante barra posteriore con l'indicatore triangolare principale.

+0

Non voglio perdere il gesto di ritorno predefinito e l'indicatore triangolare principale. Sembra che non sia possibile raggiungere questo obiettivo. Grazie per la lunga risposta. – Deny

+1

Barra di navigazione userInteractionEnabled = NO non sembra funzionare per me su iOS 10? Qualcun altro ha questo problema? – Nate

-2

SWIFT 4

Fai un @IBOutlet della voce di navigazione e quindi disattivare esso:

self.btnBackNavigation.isEnabled = false 
Problemi correlati