Réponse: utilisez self.tabBarController? .TabBar.hidden au lieu de hidesBottomBarWhenPushed dans chaque contrôleur de vue pour déterminer si le contrôleur de vue doit afficher une barre de tabulation ou non.
override func viewWillAppear(animated: Bool) {
self.tabBarController?.tabBar.hidden = true/false
}
Je voudrais
contrôleur de vue 1: la barre de tabulation doit être affichée
contrôleur de vue 2: la barre de tabulation doit être affichée
contrôleur de vue 3: la barre de tabulation ne doit pas être affichée.
contrôleur de vue 4: la barre de tabulation ne doit pas être affichée.
J'ai écrit
// prepareForSegue in view controller 1,
let upcoming = segue.destinationViewController as! viewcontroller3
upcoming.hidesBottomBarWhenPushed = true
// in view controller 3,
func clickOnButton(button: UIButton) {
self.hidesBottomBarWhenPushed = false
self.performSegueWithIdentifier("viewController2", sender: self)
self.hidesBottomBarWhenPushed = true
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "viewController2" {
let upcoming = segue.destinationViewController as! viewController2
upcoming.hidesBottomBarWhenPushed = false
}
}
// prepareForSegue in view controller 2
let upcoming = segue.destinationViewController as! viewController4
upcoming.hidesBottomBarWhenPushed = true
si 1 -> 3 puis de nouveau à 1, fonctionne.
si 1 -> 3 -> 2 puis retour à 3 et retour à 1, fonctionne.
si 2 -> 4, puis retour à 2, fonctionne.
si 1 -> 3 -> 2 -> 4 puis de nouveau à 2, la barre de tabulation n'est pas affichée. Vous vous demandez pourquoi. Des suggestions ou des explications sur hidesBottomBarWhenPushed car cela me confond beaucoup
Comme son nom l'indique, hiddenBottomBarWhenPushed ne masque que la barre inférieure si nécessaire, il ne permet pas d'afficher bottomBar. Vous pouvez le faire pour que cela fonctionne:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.hidden = true/false
}
ou simplement mettre self.tabBarController?.tabBar.hidden = true/false
dans prepareForSegue
Mais je ne vous recommanderais pas de le faire, car il serait étrange que bottomBar apparaisse soudainement, l'utilisateur pensera soudainement qu'il revient à rootViewController alors qu'il ne l'est pas.
Les utilisateurs doivent toujours savoir où ils se trouvent dans votre application et comment se rendre à leur prochaine destination.
Ajoutez cette implémentation dans ViewController que vous souhaitez masquer/afficher la barre d’onglet sur poussée/popped. cela fonctionnera également pour tous les contrôleurs de vue poussés suivants.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if wilmove {
hidesBottomBarWhenPushed = true
}
wilmove = false
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if wilmove {
hidesBottomBarWhenPushed = false
}
wilmove = false
}
var wilmove = false
override func willMove(toParentViewController parent: UIViewController?) {
super.willMove(toParentViewController: parent)
wilmove = true
if !isViewLoaded {
hidesBottomBarWhenPushed = true
}
}
Ajoutez la propriété hidesBottomBarWhenPushed au contrôleur de vue de destination et définissez-la sur true.
Exemple avec Push VC avec identifiant:
let storyboard = UIStoryboard(name: STORYBOARD_NAME, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: VC_IDENTIFIER) as! YourViewController
vc.hidesBottomBarWhenPushed = true
navigationController?.pushViewController(vc, animated: true)