web-dev-qa-db-fra.com

Comment définir le titre de la barre de navigation dans Swift?

J'essaie de définir le titre de Navigation Bar dans Swift, je mets Tab Bar et en Navigation Bar rien ne s'affiche, pas de bouton, pas de titre, rien. J'ai utilisé du code mais cela ne fonctionne pas lorsque j'utilise Tab Bar, et quand j'ai supprimé Tab Bar, le code fonctionne et tout va bien avec Navigation Bar, le titre s'affiche et les boutons s'affichent.

Le code que j'ai utilisé pour le titre est:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationItem.title = "My Title"

}

Et en Main.storyboard Je me suis connecté Navigation Controller avec Tab Bar Controller, comme sur l'image.

enter image description here

Alors, comment y remédier? Le problème est que Navigation Bar ne fonctionne pas lors de l'utilisation de Tab Bar.

20
Emm

Depuis le Tab Bar est en fait le Root View Controller du Navigation Bar, vous devez définir à la place UITabBarControllertitle dans la fonction viewWillAppear pour que cela se produise à chaque changement d'onglet:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.navigationItem.title = "My Title"
    self.tabBarController?.navigationItem.leftBarButtonItem = settingsButton //This is the IBOutlet variable that you previously added
}

Mais une meilleure façon de le faire serait de l'avoir dans l'autre sens, comme ça

Correct view hierarchy

Vous devez connecter un UINavigationController pour chaque enfant du UITabBarController, car il est plus correct sémantiquement et plus simple à maintenir.

29
kabiroberai

Votre question n'est pas claire, si le code que vous avez présenté est de UIViewController qui est conservé à l'intérieur de UINavigationController et navigationBar est affiché, vous pouvez simplement utiliser:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "My Title"
}
9
katleta3000

Dans Référence de classe UINavigationController Apple a écrit ceci:

init (rootViewController: UIViewController)
Paramètres rootViewController
Le contrôleur de vue qui se trouve au bas de la pile de navigation. Cet objet ne peut pas être une instance de la classe UITabBarController.

Mais vous pouvez le faire si vous avez insisté, mais dans ce cas, vos ViewControllers de tabbarController ont tous partagé le même titre, qui est le titre de tabbarController.

Une meilleure façon de le faire est de donner à chacun des viewControllers de tabbarController un NavigationViewController.

1
wj2061