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
.
À 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.
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.
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.
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.
Ajoutez le code ci-dessous dans votre classe ViewController2.Swift.
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.hidesBackButton = true;
}
Cela masquera votre bouton de retour.
Si vous voulez le cacher, UInavigationItem
a une propriété hidesBackButton
.