iPhone: réglage du titre de la barre de navigation

87

Salut à tous. Je suis encore assez nouveau dans le développement iPhone et j'ai un peu de mal à trouver comment changer le titre de ma barre de navigation. Sur une autre question sur ce site, quelqu'un a recommandé d'utiliser:

viewController.title = @"title text";

mais cela ne fonctionne pas pour moi ... Dois-je ajouter un UINavigationController pour accomplir cela? Ou peut-être juste une sortie de ma sous-classe UIViewController? Si cela aide, j'ai défini la barre de navigation dans IB et j'essaie de définir son titre dans ma sous-classe UIViewController. C'est une autre de ces choses simples qui me donnent mal à la tête. Mettre self.title = @ "texte du titre"; dans viewDidLoadet initWithNibNamene fonctionne pas non plus . Quelqu'un sait ce qui se passe et comment y arriver correctement?

Merci!

Arthur Skirvin
la source

Réponses:

154

Le contrôleur de vue doit être un enfant de certains UINavigationController pour que la .titlepropriété prenne effet. Si UINavigationBar est simplement une vue, vous devez pousser un élément de navigation contenant le titre ou modifier le dernier élément de navigation:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

ou

bar.topItem.title = @"title text";
KennyTM
la source
8
Sensationnel. J'ai sérieusement passé la dernière heure à parcourir les forums et la documentation à essayer de comprendre cela, et je me suis convaincu que ce serait plus complexe que cela. Ce code est si simple et je n'ai pas eu à modifier quoi que ce soit dans IB. Parfait! KennyTM, vous basculez. Si je me souviens bien, vous avez également répondu à ma question NSDate et m'avez mis à la recherche de dictionnaires. Vous êtes ma nouvelle personne préférée sur ce site. Merci beaucoup pour toute votre aide!
Arthur Skirvin
5
votre commentaire m'a fait sourire et me demander: est-ce que quelqu'un s'est déjà fait des amis ici à SO, jamais? généralement tout le monde ici est très utile mais ne semble pas exprimer d'émotions humaines (sauf le demandeur bien sûr quand il / elle est frustré)
maltalef
Voir la réponse de Sorin pour une solution compatible avec le storyboard.
devios1
Merci pour votre réponse qui m'a vraiment fait gagner beaucoup de temps. :) @kennytm
jerry_sjtu
124

si vous faites tout cela par code dans la viewDidLoadméthode du, UIViewControllervous ne devez ajouter queself.title = @"title text";

quelque chose comme ça:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

tu pourrais aussi essayer self.navigationItem.title = @"title";

Vérifiez également si votre navigationItem n'est pas nul et si vous avez défini un arrière-plan personnalisé pour la barre de navigation, vérifiez si le titre est défini sans lui.

Sorin Antohi
la source
@ SorinA, merci. C'est la meilleure façon de donner le titre de la barre de navigation.
Tirth
33

Il y a un problème avec l'utilisation self.title = @"title";

Si vous utilisez la barre de navigation avec la barre d'onglets, la ligne ci-dessus modifie également l'étiquette de l'élément de la barre d'onglets. Pour éviter cela, utilisez ce que @testing a suggéré

self.navigationItem.title = @"MyTitle";
Jigish
la source
13

Si vous voulez changer le titre de la barre de navigation (pas le titre du bouton de retour de la barre de navigation!), Ce code fonctionnera.

self.navigationController.topViewController.title = @"info";
M. Gökay Borulday
la source
9

Si vous souhaitez modifier le titre d'une barre de navigation dans un contrôleur tabBar, procédez comme suit:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
Pantelis Proios
la source
viewDidAppear a fait l'affaire pour moi après 2 heures à essayer de résoudre ce problème. Merci :)
Tchelow
topItem.title peut ou non être le titre de la barre de navigation. S'il s'agit de l'écran de niveau supérieur sans bouton de retour, il définira le titre. Mais si vous avez un bouton de retour, le topItem.title est en fait le titre du bouton de retour.
user2962499
5

Dans mon application basée sur la navigation, je fais ceci:

myViewController.navigationItem.title = @"MyTitle";
essai
la source
4

J'avais un contrôleur de navigation intégré dans un TabbarController. Cela a fonctionné

self.navigationItem.title=@"title";
Sagar Dalwale
la source
4

Par défaut, le contrôleur de navigation affiche le titre du 'topitem'

donc dans votre méthode viewdidload de votre appdelegate, vous pouvez. Je l'ai testé et ça marche

navController.navigationBar.topItem.title = @"Test";
ronaldus_magnus
la source
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

Ce code a fonctionné.

rmsh
la source
Bienvenue à SO et merci pour le message. Il est préférable de publier cette information sous forme de commentaire, veuillez consulter Comment répondre pour plus d'informations
Serge Belov
2

Si vous travaillez avec des storyboards, vous pouvez cliquer sur le contrôleur, passer à l'onglet Propriétés et y définir le texte du titre.

Gars
la source
1

Je suppose que vous avez besoin d'un titre dynamique, c'est pourquoi vous ne le définissez pas dans IB.

Et je suppose que votre objet viewController est celui spécifié dans le NIB?

Peut-être essayer de le définir sur une valeur fictive dans IB, puis déboguer les méthodes pour voir quel contrôleur a la valeur fictive - en supposant qu'elle apparaisse comme titre ...

Chris Kimpton
la source
1

Depuis votre TableViewController.m:

self.navigationController.navigationBar.topItem.title = @ "Blah blah Some Amazing title";

OneInABajilien
la source
1

Pour tous vos Swift-ers là-bas, cela a parfaitement fonctionné pour moi. C'est notamment l'un des moyens les plus courts de définir le titre:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
kbpontius
la source