web-dev-qa-db-fra.com

Changer le titre de navigation par programmation

J'ai une barre de navigation avec un titre. Lorsque je double-clique sur le texte pour le renommer, il indique en fait que c'est un élément de navigation, alors c'est peut-être ça.

J'essaie de changer le texte en utilisant du code, comme:

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

Ce n'est pas mon code évidemment, juste montrer comment cela fonctionnerait.

Donc, chaque fois que j'appuie sur le bouton, je veux que le titre change.

161
Rising

Vous changez le titre en changeant le title du contrôleur de vue affiché:

viewController.title = "some title"

Normalement, cette opération est effectuée dans la vue chargée sur le contrôleur de vue:

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

Toutefois, cela ne fonctionne que si votre contrôleur de vue est intégré à un UINavigationController. Je recommande vivement plutôt que de créer vous-même une barre de navigation. Si vous insistez pour créer vous-même une barre de navigation, vous pouvez modifier le titre en procédant comme suit:

navigationBar.topItem.title = "some title"
466
drewag

Essayez ce qui suit dans viewDidLoad

self.navigationItem.title = "Your Title"
58
Avi

Le code ci-dessous fonctionne pour moi avec Xcode 7:

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}
12
grmonkeybiz

J'ai trouvé que ça marche:

navigationItem.title = "Title"
10
AJ9

et aussi si vous essayez de créer Navigation Bar manuellement, ce code vous aidera

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}
5

Normalement, la meilleure pratique consiste à définir le titre sur la variable UIViewController. En faisant cela, la UINavigationItem est également définie. En règle générale, cela vaut mieux que d’allouer et d’initialiser par programme une UINavigationBar qui n’est liée à rien.

Vous manquez certains avantages et fonctionnalités pour lesquels la UINavigationBar a été conçue. Voici un lien vers la documentation qui peut vous aider. Il traite des différentes propriétés que vous pouvez définir sur la barre réelle et sur un UINavigationItem.

Gardez juste à l'esprit:

  1. Vous perdez la fonctionnalité du bouton de retour (sauf si vous câblez vous-même)
  2. Le geste intégré consistant à "faire glisser le doigt du côté gauche vers l'arrière" est perdu

UINavigationController sont vos amis.

4
codeblooded

La bonne réponse pour les personnes utilisant Swift4 serait

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}
3
Kevin Singh

Swift

J'ai créé un point de vente pour l'élément de barre de titre de navigation fourni avec la barre de navigation (à partir du navigateur d'objets) dans le storyboard. Puis j'ai poursuivi la ligne ci-dessous:

navigationBarTitleItem.title = "Hello Bar"
3
nyxee

Si vous souhaitez modifier le titre d'un contrôleur de vue enfant d'un contrôleur de vue intégré à un contrôleur de navigation, voici ce qui se présente:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}
0
Francojamesfan

Si vous avez un NavigationController incorporé à l'intérieur d'un TabBarController, voir ci-dessous:

super.tabBarController?.title = "foobar"

enter image description here

Vous pouvez déboguer des problèmes comme celui-ci avec des scripts de débogueur. Essayez la commande Chisel'spvc pour imprimer chaque vue visible/masquée de la hiérarchie.

0
rustyMagnet

Je préfère utiliser self.navigationItem.title = "Your Title Here" par rapport à self.title = "Your Title Here" pour fournir un titre dans la barre de navigation, car la barre d'onglets utilise également self.title pour modifier son titre. Vous devriez essayer le code suivant une fois.

Remarque: il est nécessaire d’appeler le cycle de vie de la super vue avant de commencer les opérations.

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavBar()
    }
}

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}
0
Mukesh Shakya