web-dev-qa-db-fra.com

Comment désactiver le bouton de retour dans la barre de navigation

Existe-t-il un moyen officiel de définir UIBarButtonItem.enabled propriété? J'ai essayé de définir un backButtonItem dans le contrôleur précédent. Mais la propriété enabled est ignorée.

Plus dans ce simple exemple de projet .

Je ne veux pas de solution comme "créez votre propre leftBarButtonItem et définissez son alpha ..."

Modifier: je ne veux pas le cacher, seulement le désactiver avec une couleur grisée et une interaction utilisateur désactivée. C'est exactement le même comportement que pour désactivé leftBarButtonItem.

33
Deny

À ce jour, il n'est pas possible de désactiver le bouton de retour à l'aide de la propriété enabled. La propriété backBarButtonItem sera nil sauf si vous créez un élément personnalisé et même alors elle ignorera la propriété enabled. Il y a deux façons (non satisfaisantes) de contourner cela.

Masquer le bouton

C'est ce que Apple veut que vous fassiez étant donné qu'ils ignorent la propriété enabled. C'est aussi simple que

navigationItem.hidesBackButton = true  

et devrait être l'approche préférée, sauf si vous avez de bonnes raisons.

Désactiver et teinter la barre de navigation

Vous pouvez désactiver l'interaction de l'utilisateur sur toute la barre de navigation et la colorer pour faire apparaître le bouton de retour désactivé.

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

Malheureusement, cela affecte également d'autres éléments de la barre de navigation, ce qui pourrait ne pas être une option si, par exemple, vous avez un autre élément de bouton de barre sur le côté droit.

Utiliser un élément de bouton de barre gauche personnalisé

Le leftBarButtonItem n'ignore pas la propriété enabled, vous pouvez donc créer un élément personnalisé et déclencher manuellement le pop lorsqu'il est activé.

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

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

Cependant, cela n'aura pas le style de bouton de barre arrière avec l'indicateur triangulaire de tête.

68
hennes

Ajoutez le code ci-dessous dans votre classe ViewController2.Swift.

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.hidesBackButton = true;
    }

Cela masquera votre bouton de retour.

7
BKjadav

Si vous voulez le cacher, UInavigationItem a une propriété hidesBackButton.

4
Templar