Où forcer le backBarButtonItem title ?

muqaddarmuqaddar Administrateur
05:55 modifié dans API UIKit #1
Je n'arrive pas à  changer le titre de mes backBarButtonItem qui prennent par défaut la valeur du titre de la vue précédente.

Or dans la doc Apple :

Set the backBarButtonItem <br />property of the next view controller's navigationItem property to specify analternate title or button.


J'ai essayé de changer avec :

self.navigationItem.backBarButtonItem.title = @&quot;Sujets&quot;;


dans viewDidLoad sans succès. Idem dans le contrôleur précédent avec de pusher.

Pas de résultat également en essayant de réécrire tout le backBarButtonItem... dans viewDidLoad.

Alors dans quelle méthode ?

Réponses

  • Philippe49Philippe49 Membre
    05:55 modifié #2
    Dans la doc sur UINavigationItem

    Use the initWithTitle: method to create a navigation item specifying the item's title. The item cannot be represented on the navigation bar without a title. Use the backBarButtonItem property if you want to use a different title when this item is the back item.

    En créant l'item entièrement dans le code ?
  • muqaddarmuqaddar Administrateur
    05:55 modifié #3
    dans 1240994362:

    Dans la doc sur UINavigationItem

    Use the initWithTitle: method to create a navigation item specifying the item's title. The item cannot be represented on the navigation bar without a title. Use the backBarButtonItem property if you want to use a different title when this item is the back item.

    En créant l'item entièrement dans le code ?


    Et non justement ! C'est ce que je faisais en premier. En tout cas ça ne marche pas dans le viewDidLoad.

    <br />	// load the back button<br />	UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@&quot;Discussion&quot; style:UIBarButtonItemStylePlain target:self action:nil]; <br />	self.navigationItem.backBarButtonItem = backButtonItem;<br />	[backButtonItem release];<br />
    
  • AliGatorAliGator Membre, Modérateur
    05:55 modifié #4
    Tu mets bien ce code... dans le ViewController parent, celui dans lequel tu vas ensuite faire appel à  pushViewController pour pusher ta vue fille, pour laquelle pour elle tu veux un titre de bouton personnalisé ?

    Oui c'est un peu déroutant, mais c'est bien dans le VC parent qu'il faut créer ton backButtonItem, avant de pusher ton nouveau VC qui va avoir ledit bouton en haut à  gauche.
  • 05:55 modifié #5
    Dans la vue précendente, au moment où tu fais un push vers la suivante, la méthode viewWillDisappear: est appelée. Tu peux surement faire un self.title = @My New Back Button; dedans pour ainsi changer le nom du view controller.

  • muqaddarmuqaddar Administrateur
    05:55 modifié #6
    dans 1240998786:

    Tu mets bien ce code... dans le ViewController parent, celui dans lequel tu vas ensuite faire appel à  pushViewController pour pusher ta vue fille, pour laquelle pour elle tu veux un titre de bouton personnalisé ?

    Oui c'est un peu déroutant, mais c'est bien dans le VC parent qu'il faut créer ton backButtonItem, avant de pusher ton nouveau VC qui va avoir ledit bouton en haut à  gauche.


    C'est dingue.
    Le self.navigationItem.backBarButtonItem = backButtonItem; est celui de la vue suivante dans la vue précédente.
    Merci, je devenais fou parce qu'en effet ils étaient tous décalés d'une vue.
  • 05:55 modifié #7
    Ha tiens oui j'avais pas vu le post de Ali :D Merci pour la précision c'est bien mieux comme ça.
  • Philippe49Philippe49 Membre
    avril 2009 modifié #8
    et leftBarButtonItem plutôt que backBarButtonItem doit marcher dans le VC en cours , non ?
    (en définissant un selector)
  • muqaddarmuqaddar Administrateur
    05:55 modifié #9
    dans 1241004254:

    et leftBarButtonItem plutôt que backBarButtonItem doit marcher dans le VC en cours , non ?
    (en définissant un selector)


    Oui mais on perd la forme de retour du bouton backBarButtonItem. ;)
  • Philippe49Philippe49 Membre
    05:55 modifié #10
    Oui, et il est tout à  fait logique que ce soit le VC parent qui s'occupe du travail (qui en général aboutit à  un release du VC) plutôt qu'une action du VC courant (liée au leftBarButton), celui-ci ne pouvant pas s'auto-détruire sans demander au parent de le faire.

    Finalement, c'est complètement logique que le backBarButton appartienne au VC parent.
  • muqaddarmuqaddar Administrateur
    05:55 modifié #11
    dans 1241006684:

    Oui, et il est tout à  fait logique que ce soit le VC parent qui s'occupe du travail (qui en général aboutit à  un release du VC) plutôt qu'une action du VC courant (liée au leftBarButton), celui-ci ne pouvant pas s'auto-détruire sans demander au parent de le faire.


    D'accord sur ce point.

    dans 1241006684:

    Finalement, c'est complètement logique que le backBarButton appartienne au VC parent.


    Là  moins, je vois pas pourquoi le bouton en lui-même physiquement parlant n'appartiendrait pas à  la vue en cours, celle qu'on regarde et qu'on affiche, même s'il pointe vers l'action de la vue parente qui fait le boulot et release la vue en cours.
  • Philippe49Philippe49 Membre
    05:55 modifié #12

    dans 1241007045:

    dans 1241006684:

    Finalement, c'est complètement logique que le backBarButton appartienne au VC parent.


    Là  moins, je vois pas pourquoi le bouton en lui-même physiquement parlant n'appartiendrait pas à  la vue en cours, celle qu'on regarde et qu'on affiche, même s'il pointe vers l'action de la vue parente qui fait le boulot et release la vue en cours.


    Physiquement, le même emplacement peut-être occupé par deux boutons distincts. Et la "logique" qui a été choisie ici est la fonctionnalité du bouton plutôt que la logique visuelle ... C'est un peu comme une entreprise mère qui délèguerait un responsable dans une entreprise fille ... c'est ce que je mets dans l'expression "logique".
  • Philippe49Philippe49 Membre
    05:55 modifié #13
    D'ailleurs quelqu'un a déjà  essayé de mettre les deux backBarButtonItem+leftBarButtonItem ?
  • muqaddarmuqaddar Administrateur
    05:55 modifié #14
    dans 1241008799:

    D'ailleurs quelqu'un a déjà  essayé de mettre les deux backBarButtonItem+leftBarButtonItem ?


    Je viens de faire le test. Le leftbarButtonItem prend le dessus, ce qui est logique puisqu'au final, lui il est appelé dans la bonne vue et doit écraser l'autre puisqu'il est aussi créé après.
Connectez-vous ou Inscrivez-vous pour répondre.