79 votes

UINavigationBar - Définir le titre par programme ? iPhone SDK 4

J'ai une application à barre d'onglets avec une vue différente sur chaque onglet. Chaque vue possède une UINavigationBar dont le titre est défini dans Interface Builder. Je veux changer le titre en fonction d'une clause de la méthode ViewDidLoad, donc si x { changer le titre }.

J'ai essayé self.title = @"title" que j'ai lu ici sur Stackoverflow - mais cela change le titre de l'élément de la barre d'onglets lui-même.

Alors, comment fait-on ?

Merci,

214voto

Greg Points 15661

J'ai défini le titre par programme en utilisant un code semblable à celui-ci :

navBar.topItem.title = @"title";

où navBar est déclaré comme un IBOutlet UINavigationBar lié à la barre de navigation dans le constructeur d'interface. Cela a fonctionné dans mon application, mais je n'utilisais pas de barre d'onglets.

Si navBar.topItem est l'élément de la barre d'onglets, je ne vois pas comment vous pourriez modifier le titre qui apparaît dans la barre de navigation sans modifier également le titre de l'élément de la barre d'onglets, puisque l'élément supérieur de navBar et l'élément de la barre d'onglets sont le même objet.

3 votes

Cela a parfaitement fonctionné, mais je savais que j'avais oublié de faire quelque chose, à savoir lier l'IBOutlet UINavigationBar à la barre elle-même. Le titre et le texte de l'onglet sont indépendants l'un de l'autre, d'ailleurs.

0 votes

Il y a un problème, lorsque vous avez un bouton Retour, il change le titre du bouton Retour au lieu de la barre de navigation, vérifiez la réponse de @CrisP.

0 votes

La question portait sur une vue qui possède une UINavigationBar, ce qui est différent d'une UINavigationController sur laquelle sont poussés des contrôleurs de vue. La réponse de ChrisP est certainement la bonne réponse dans le contexte d'un UINavigationController, mais pas pour le cas discuté dans la question.

72voto

ChrisP Points 2204

Utilisez

self.navigationItem.title = @"the title";

comme cadre navBar.topItem.title ne fonctionnera pas dans toutes les circonstances.

4 votes

NB ne peut être utilisé qu'avec UINavigationBar associé à un contrôleur de vue. Extrait de la documentation " : C'est une instance unique de UINavigationItem créée pour représenter le contrôleur de vue lorsqu'il est poussé sur une barre de navigation. La première fois que vous accédez à cette propriété, l'UINavigationItem est créé. Par conséquent, vous ne devriez pas accéder à cette propriété si vous n'utilisez pas de contrôleur de navigation".

25voto

Muzammil Points 387

Utilisez ce :

CGRect navBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 44.0);
UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame];

UINavigationItem *navItem = [UINavigationItem alloc];
navItem.title = @"Your Title";

[navBar pushNavigationItem:navItem animated:false];

[self.view addSubView:navBar] ; ou self.tableView.tableHeaderView = navBar ; etc.

11voto

Augustine P A Points 974

Si la classe est un type de UIViewController, alors vous pouvez définir le titre comme indiqué dans la méthode viewDidLoad.

    [self setTitle:@"My Title"];

0 votes

C'est justement ce qui causait son problème : cela modifie également le titre de l'élément de la barre d'onglets, ce qui n'était PAS apprécié.

7voto

Shyam Points 51

Créer IBOutlet de UINavigationBar

navigationBar.topItem.title = @"Title";

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X