Modification du titre de navigation par programmation

188

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

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

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

Ce n'est évidemment pas mon code, il montre simplement comment cela fonctionnerait.

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

En hausse
la source

Réponses:

539

Vous modifiez le titre en modifiant le titre du contrôleur de vue affiché:

viewController.title = "some title"

Normalement, cela se fait en vue de la charge sur le contrôleur de vue:

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

Cependant, cela ne fonctionne que si votre contrôleur de vue est intégré dans un UINavigationController. Je recommande vivement de le faire au lieu 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 faisant:

navigationBar.topItem.title = "some title"
dessiner
la source
1
ViewController.type n'a pas de membre nommé title. C'est l'erreur que je reçois.
hausse
2
Vous ne l'appelez pas directement sur la classe. Vous l'appelez sur une instance d'une sous-classe de UIViewController
dessiné
Oui, ViewControllerfait référence à la classe elle-même. Vous devez faire référence à une instance de ViewController. À partir d'une méthode de votre classe, par exemple viewDidLoad, vous pouvez le faire en utilisant self. Si vous ne connaissez pas la différence entre une classe et une instance, je vous recommande fortement d'apprendre ce que c'est. Cet article vous aidera.
tirage du
Fonctionne aussi comme un charme dans Xcode .. juste un petit changement -> self.title = @ "un titre";
Résumé du
self.title = "un titre" a fonctionné pour moi. Je vous remercie ! J'ai essayé 'navigationController? .NavigationItem.title = "Un titre". vraiment pas sûr pourquoi cela ne fonctionne pas. (J'ai un élément de navigation là-bas, que j'ai placé pour afficher le titre, en plus du contrôleur de navigation intégré). Je pense toujours que cela devrait fonctionner, mais je ne sais pas pourquoi. Le débordement de pile à la rescousse une fois de plus!
Naishta
68

Essayez ce qui suit dans viewDidLoad

self.navigationItem.title = "Your Title"
Avi
la source
1
Travaille pour moi. iOS 11.4
Antony Wong
13

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

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

J'ai trouvé que cela fonctionnait:

navigationItem.title = "Title"
AJ9
la source
Comment centrez-vous le titre dans un contrôleur de vue qui est un enfant d'un UINavigationController? Pour une raison quelconque, le texte est aligné à gauche. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy
5

et aussi si vous essayez de créer Navigation Barmanuellement 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);
}
Aleksey Timoshchenko
la source
4

Normalement, la meilleure pratique consiste à définir le titre sur le fichier UIViewController. En faisant cela, le UINavigationItemest également défini. En général, c'est mieux que d'allouer et d'initialiser par programme un UINavigationBarqui n'est lié à rien.

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

Gardez simplement à l'esprit:

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

UINavigationControllerCe sont vos amis.

codeblooded
la source
4

La bonne réponse pour les personnes utilisant serait

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

Swift 3

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

navigationBarTitleItem.title = "Hello Bar"
Nyxee
la source
2

Si vous vouliez changer le titre d'un contrôleur de vue enfant d'un contrôleur de vue de page intégré dans un contrôleur de navigation, cela ressemblerait à ceci:

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

Si vous avez un NavigationControllerintégré à l'intérieur d'un TabBarControllervoir ci-dessous:

super.tabBarController?.title = "foobar"

entrez la description de l'image ici

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

rouilléMagnet
la source
0

Dans Swift 4:

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

J'espère que cela aide, salutations!

Radames E. Hernandez
la source
2
Ce n'est que la moitié de la réponse acceptée. Aussi, si vous dites que rien n'a changé, alors pourquoi publieriez-vous quelque chose?! Supprime s'il te plaît.
Eric Aya
@Moritz êtes-vous modérateur ou quelque chose comme ça? si vous dites Oui, je le supprimerai, sinon je ne le supprimerai pas.
Radames E. Hernandez
1
Tu le dis vraiment?, Au dessus de moi il y a 4 réponses complètement égales, alors pourquoi viens-tu avec moi et me dis d'effacer la mienne? Je suis un utilisateur de confiance qui soutient la communauté, je ne me contente pas de répéter les réponses. Je voulais juste mettre à jour cette question avec une version swift mise à jour.
Radames E. Hernandez
3
Il n'y a rien de mis à jour dans votre réponse. C'est le même code que la réponse acceptée, la partie «Normalement, cela se fait en vue de charger» ...
Eric Aya
0

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

Remarque: l'appel du cycle de vie de la super vue est nécessaire avant de faire quoi que ce soit.

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

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

Swift 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}
Marlhex
la source
0

Swift 5.1

// Définir le titre de NavigationBar par programmation et dynamique

Remarque: ajoutez d'abord NavigationControllerItem à Your ViewControllerpuis allez dans leur ViewController.swiftfichier et copiez et collez simplement ceci viewDidLoad().

navigationItem.title = "Your Title Here"

Raksha.
la source