Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS] Changer "Back button" de la Navigation Bar

Sujet résolu
    10 avril 2012 à 13:02:39

    Bonjour à tous !
    Je suis à la fin du développement de mon application, et j'ai un problème plutôt embêtant...
    Je vous explique :

    Comment est organisé mon application :
    La première vue est une tableView que j'ai faite "à la main", en ajoutant cellules par cellules. J'ai donné le nom de "Categories" à cette vue en double-cliquant sur la navigation bar. Chaque cellule mène à plusieurs vues, arrangées sous forme d'onglets, ce sont des tabBar.
    Donc lorsque je suis dans une des vues tabBar, j'ai un bouton retour, que j'ai personnalisé. Je l'ai personnalisé en ajoutant la ligne 6 dans ce bout de code de mon fichier AppDelegate.m :

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
    
        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nvgbar.png"] forBarMetrics:UIBarMetricsDefault];
        [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"BackButt.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbar.png"]];
        
        return YES;
    }
    


    Ce bouton, c'est un bouton bleu sur lequel est écrit "Back".
    Le problème est qu'entre la lettre B et a de "Back", le titre de la tableView (tableView à laquelle on retourne en appuyant sur le bouton), soit "Categories", vient s'y glisser. Et c'est disons...pas très esthétique...

    Ma question :

    Comment faire pour dire à Xcode de ne pas afficher "Categories" sur le bouton retour sans effacer le titre "Categories" de ma tableView ?

    Merci de m'avoir lu. ;)
    Hugo. :)
    • Partager sur Facebook
    • Partager sur Twitter
      10 avril 2012 à 13:04:04

      Bonjour,

      Pas besoin de marquer "Titre : (...)" dans ton titre. C'est corrigé.
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        10 avril 2012 à 13:13:23

        Oui, j'ai remarqué ça juste après avoir posté le topic...my bad :honte:
        • Partager sur Facebook
        • Partager sur Twitter
          10 avril 2012 à 23:43:00

          Salut,

          C'est un comportement normal pour le back de prendre le titre de la vue précédente.
          Pour supprimer le texte du bouton back, essaies ce code dans la vue où le bouton apparait :

          - (void) viewWillAppear:(BOOL)animated
          {
              self.navigationItem.backBarButtonItem.title = @"";
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            10 avril 2012 à 23:48:51

            Malheureusement ça ne marche pas...Une autre idée ? :)
            J'ai un fichier qui contrôle mes vues mais je n'ai pas de fichier qui contrôle mon Tab Bar Controller, devrais-je en créer un ? Si oui, comment créer un fichier spécifique aux Tab Bar Controller ?

            EDIT : Je suis très, très fier et content de vous annoncer que j'ai trouvé la solution ! :D^^
            La tableView qui menait aux nombreuses vues organisees par des tabBar n'etait pas relié à un UITableViewController. J'en ai donc crée un, j'ai mis en tant que commentaires deux méthodes et j'ai ajouté le code suivant dans la méthode viewDidLoad (je vous mets la méthode viewDidLoad et les deux methodes que j'ai mis en commentaires pour que vous voyez qui elles sont ;) ) :

            // fichier lie a ma tableView
            
            - (void)viewDidLoad
            {
                [super viewDidLoad];
                UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"JeMetCeQueJeVeux" style:UIBarButtonItemStylePlain target:nil action:nil];
                self.navigationItem.backBarButtonItem = backButton;
            }
            
            // methodes mises en commentaires et qui posaient probleme
            
            /*- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
            {
            #warning Potentially incomplete method implementation.
                // Return the number of sections.
                return 0;
            }
            
            - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
            {
            #warning Incomplete method implementation.
                // Return the number of rows in the section.
                return 0;
            */
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2012 à 11:54:31

              Ok, il fallait dont recréer un UIBarButtonItem puis de le remplacer directement.

              Penses à le release juste après si tu n'utilises pas ARC.
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2012 à 13:00:46

                Oui mais un UIBarButtonItem dans le fichier relié à ma tableView et non à mes autres views...
                Oui mais comme j'utilise Xcode 4.2 eh bien j'utilise ARC automatiquement donc pas de problème concernant la mémoire ;)
                Cependant j'ai toujours un problème, quand je met ce bout de code (sans rien dans ma chaine de caractère), le Back Button disaparait...:
                UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
                

                Et quand je met un espace, une espèce de brique transparente vient se loger entre "B" et "ack" de la même manière que le faisait "Categories" :
                UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
                


                Donc le problème est toujours là, comment faire ? Avez-vous des idées ?

                Merci d'avance ! :)
                • Partager sur Facebook
                • Partager sur Twitter
                  11 avril 2012 à 15:49:32

                  Si je comprend bien ton projet, tu voudrais une image pour bouton de retour sans texte à l'intérieur, soit customiser le bouton back.

                  Si c'est le cas j'ai la solution, dans le contrôleur de vue de la vue poussé(la vue où il y aura le bouton back) écris ce code:

                  - (void)viewDidLoad
                  {
                      [super viewDidLoad];
                      UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 70, 20)];//tes dimensions de l'image
                      [backButton setImage:[UIImage imageNamed:@"nom-de-l-image"] forState:UIControlStateNormal];
                      [backButton addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchDown];//il faudra définir une fonction de retour
                      UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
                      self.navigationItem.leftBarButtonItem = backButtonItem;//on remplace le bouton en haut à gauche
                  }
                  
                  -(void)popViewController {
                      //fonction de retour à la vue précédente
                      [self.navigationController popViewControllerAnimated:YES];
                  }
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2012 à 16:48:20

                    Nan le titre "Categories" est toujours là...Mais c'est bizarre. Car le code que j'avais mis pour suprrimer le titre, je l'avais mis dans mon UITableViewController, et ça avait changé le backButton des vues dont il n'était pas le controleur, mais en même temps ça paraissait plutot logique parce que c'est a lui que menait le bouton retour...

                    Enfin bref, avec le code que tu me donnes, si je le met dans mon UITableViewController, ça crée le bouton qu'il faut, mais en haut de ma TableView, ce qui est inutile.
                    Si je le met dans mon fichier qui contrôle mes vues, alors ça ne change rien.

                    Qu'on soit d'accord, le code qui effaçait le titre disparait mais celui qui donne une image a mon bouton dans la fichier AppDelegate.m je le garde oui ?

                    Merci pour ton aide Pik@chu :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 avril 2012 à 17:08:45

                      Citation : Coolsinus


                      Enfin bref, avec le code que tu me donnes, si je le met dans mon UITableViewController, ça crée le bouton qu'il faut, mais en haut de ma TableView, ce qui est inutile.


                      Il faut le mettre dans ta vue détail, j'imagine que tu click sur une cellule pour aller dans une vue détail et c'est là que tu veux customiser le bouton back.

                      Citation : Coolsinus


                      Qu'on soit d'accord, le code qui effaçait le titre disparait mais celui qui donne une image a mon bouton dans la fichier AppDelegate.m je le garde oui ?


                      Oui le code ci dessus créer un nouveau bouton donc tu n'a plus besoin de ton custom dans appdelegate, mais n'hésites pas à faire tes propres test c'est comme ça qu'on apprend ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 avril 2012 à 20:51:23

                        Oh crois moi, tout ce que je connais en programmation, je l'ai appris tout seul !

                        Le code que tu m'as donné je l'ai mis dans ma méthode viewDidLoad d'un des mes fichiers menant à mes vues organisées en TabBar, et malheureusement ça ne changeait rien. J'ai ajouté ta méthode popViewController juste en-dessous de celle-ci, mais toujours rien.
                        Mais tu me dis que ton code crée un nouveau bouton, mais qu'en est-il alors du bouton retour par défaut ?

                        Donc je supprime le code du AppDelegate ça d'accord mais aussi celui effaçant le titre oui ? :

                        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
                        


                        Il faut vraiment que je trouve car c'est le dernier problème de mon application, après elle sera prête à être publiée avec peu de délai
                        , mais résoudre ce problème est vital ! :D
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 avril 2012 à 22:28:26

                          Si jamais tu n'arrive pas à résoudre le problème, essaies de donner plus d'info sur ton projet (comment tu l'as construite, son architecture) sinon tu peux me l'envoyer pour que je regarde si tu veux.

                          Sinon tiens moi au courant lorsque qu'elle sera sur l'appstore.
                          Bon courage.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 avril 2012 à 23:34:00

                            Je n'y arrive vraiment pas, le code ne fait strictement rien...
                            Je l'ai décrit dans mon premier message :

                            La premiere vue est une TableView qui est composée de plusieurs cellules qui mènent chacunes à plusieurs vues, ces vues organisées sous forme de TabBar.

                            EDIT : J'ai trouvé ! :D J'ai crée un fichier de type UITabBarController, dans le fichier .m j'ai mis ton code :
                            - (void)viewDidLoad
                            {
                                [super viewDidLoad];
                                UIButton *backButt = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 86, 31)]; //tes dimensions de l'image
                                [backButt setImage:[UIImage imageNamed:@"BackkkButt.png"] forState:UIControlStateNormal];
                                [backButt addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchDown];//il faudra définir une fonction de retour
                                UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButt];
                                self.navigationItem.leftBarButtonItem = backButtonItem;//on remplace le bouton en haut à gauche
                            }
                            
                            À mes 
                            -(void)popViewController {
                                //fonction de retour à la vue précédente
                                [self.navigationController popViewControllerAnimated:YES];
                            }
                            


                            J'ai relié mes Tab Bar Controlleur qui gérent les différentes vues organisées sous forme de TabBar à mon UITabBarControlleur et BOUM ! Ça marche ! :D
                            • Partager sur Facebook
                            • Partager sur Twitter

                            [iOS] Changer "Back button" de la Navigation Bar

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown