[UINavigationBar] comment la personnaliser

oBooBo Membre
01:26 modifié dans API UIKit #1


Bonjour à  tous.

Voilà  une question qui peut paraà®tre tout simple à  première vue mais qui me pose beaucoup de soucis : comment peut-on personnaliser la navigation bar d'une application.

Dans tous les exemples que j'ai vu le comportement et l'aspect de la navigation bar est trivial : un titre de texte, le fameux fond en dégradé bleu que l'on retrouve partout et la position en haut de l'écran.

Si je veux changer la position de ma NavigationBar (par exemple en dessous d'un logo) et que le fond de la navigation bar soit d'une autre teinte ; comment cela est-il possible ?

J'ai tenté d'insérer une UINavigationBar dans InterfaceBuilder à  la position souhaitée, de changer les paramètres de la couleur, d'ajouter directement mes UIBarButton avec les libellés qui vont bien ; je relie ensuite l'outlet standart navigationItem présent dans tous les UIViewController au UINavigationItem de la UINavigationBar que j'ai crée dans IB.

Je fais ça dans mon top controller et je fais la même chose dans mon controller fils (celui qui prend la main lorsque l'on clique dans un élément de la tableView de mon top controller) en complétant le champ backButton avec un libellé personnalisé pour ce nouvel écran.

Dans le top controller tout s'affiche correctement : la couleur, le titre, le boutons, la position.
Lorsque je clique sur un élément de mon tableView j'appelle le code suivant :

1.[[self navigationController] pushViewController:personViewController animated:YES];

L'animation se fait parfaitement et mon nouveau controller affiche bien sa vue.

Cependant, la navigation bar de mon nouveau controller n'est pas du tout celle spécifiée : elle est vide, le titre ne s'affiche pas et le backButton non plus, la position correspond par contre.

Quelqu'un a une idée de comment créer sa NavigationBar sous IB en fait (car il semble que ce soit ça le problème...) ?

Je sais pas si mes explications sont assez claires, je peux pas trop mettre de sources ou de screenshots pour l'instant parce que c'est le bazar dans mon workspace.

Merci d'avance.

oBo.

Réponses

  • oBooBo Membre
    01:26 modifié #2
    Bien, j'ai avancé dans mon problème et j'ai au moins trouvé comment créer la UINavigationBar via Interface Builder.

    Alors il faut déclarer dans notre controller un UINavigationItem en IBOutlet. Il faut le relier dans IB à  notre UINavigationBar fraichement créée et le tour est joué. Il faut également relier le delegate du UINavigationBar vers le file's owner.

    J'ai donc fais ça pour mon top controller et pour mon controller fils ; j'ai bien les affichages voulus à  une exception : dans le UINavigationBar de mon controller fils je mets "Retour" dans le champ "back button", malheureusement aucun bouton de type back n'est visible. J'ai essayé, sans succés également, de le faire afficher par le code via la méthode suivante :

    <br />- (void)viewDidLoad {<br />&nbsp; &nbsp; [super viewDidLoad];<br /><br />	UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@&quot;Retour&quot;<br />																&nbsp; style:UIBarButtonItemStyleBordered target:self action:@selector(action:)];<br />	self.navBar.backBarButtonItem = addButton;<br />	self.navBar.hidesBackButton = NO;<br />	[addButton release];<br />}<br />
    


    Est-ce que quelqu'un aurait une idée de comment faire afficher ce bouton back et de faire en sorte qu'il soit directement relié à  mon top controller ?

    Merci d'avance.

    oBo.
  • oBooBo Membre
    01:26 modifié #3
    J'ajoute que si dans le code je fais la méthode suivante :

    <br />- (void)viewDidLoad {<br />&nbsp; &nbsp; [super viewDidLoad];<br />	<br />	// add our custom image button as the nav bar&#39;s custom left view<br />	UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@&quot;Retour&quot;<br />																&nbsp; style:UIBarButtonItemStyleBordered target:self action:@selector(action:)];<br />	self.navBar.leftBarButtonItem = addButton;<br />	[addButton release];<br />}<br />
    


    Je verrais bien un bouton rectangulaire avec écrit "Retour" s'afficher dans la partie gauche de mon UINavigationBar.

    Apparement le problème d'affichage n'est présent que pour le bouton de type "back".
Connectez-vous ou Inscrivez-vous pour répondre.