2010-12-07 7 views
3

Je suis perplexe. J'utilise un UINavigationController et sur une vue j'essaie de cacher le bouton de retour. Mais quand je fais cela, il cache le bouton de retour sur le prochain niveau de vues aussi.iPhone - UINavigationItem - cacher le bouton précédent

En - (void)viewWillAppear:(BOOL)animated je:

[self.navigationItem setHidesBackButton:YES animated:NO]; 

Et - (void)viewWillDisappear:(BOOL)animated je:

[self.navigationItem setHidesBackButton:NO animated:NO]; 

Cela fait juste le bouton de retour apparaît juste avant qu'il ne quitte (ce qui semble être c'est la fonctionnalité correcte cet appel). Par conséquent, je me suis lassé de mettre

[self.navigationItem setHidesBackButton:NO animated:NO]; 

dans - (void)viewWillAppear:(BOOL)animated de la vue suivante, et cela ne fonctionne toujours pas.

Ceci est un peu déroutant puisque self.navigationItem.backBarButtonItem est une référence de ce que le bouton de retour de cette vue sera quand il s'agit de la vue juste en dessous de la vue de dessus (ref). Mais self.navigationItem.hidesBackbutton est de savoir si le bouton de retour est affiché lorsqu'il s'agit de la vue de dessus (ref). Donc, quelqu'un a-t-il une idée de la raison pour laquelle il cacherait le bouton de retour de la vue suivante?

Une autre chose étrange est que cela fonctionne quand je vais vers le bas une autre vue. Pour une représentation plus visuelle, disons que j'ai les vues suivantes:

A > B > C > D 

B est la vue qui me préoccupe. Je veux cacher le bouton de retour qui irait à A. Quand je fais cela, il cache le bouton de retour sur C aussi. Mais si je fais descendre à D, le bouton de retour apparaît et tout agit comme il le devrait. C'est-à-dire que je peux revenir en C, puis revenir en B. B a caché son bouton et si je retourne en C, le bouton de retour apparaît comme il se doit.

Des idées?

Répondre

9

Il semble y avoir une sorte de bug concernant le masquage et l'affichage du bouton de retour lorsqu'il s'agit d'un UINavigationController. Un problème similaire au vôtre est backButton of NavigationController don't appear.

J'ai fait quelques tests à ce sujet et même si je n'ai pas d'explication voici quelques suggestions qui pourraient vous aider.

  • seulement faire des appels à setHidesBackButton:animated: dans viewDidAppear: et pas dans viewWillAppear:
  • Ne pas utiliser self.navigationItem.hidesBackButton partout.
+2

Merci pour la réponse. Le mettre en vueDidAppear a aidé. Un moyen de l'empêcher de clignoter pendant une fraction de seconde? – RyanJM

1

Je suppose que vous savez que le fait de masquer le bouton de retour n'empêche pas un utilisateur de cliquer dessus?

Pour empêcher un clic, vous devez le définir comme nul.

self.navigationItem.leftBarButtomItem = nil; 

Ensuite, vous pouvez créer un nouveau bouton de retour dans la méthode de viewWillAppear « B ».

4

Pour obtenir par ce bogue stupide, je ne l'ai pas du tout setHidesBackButton mettre en œuvre, mais je viewDidLoad mis les éléments suivants:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc] init]]; 
+0

Merci, j'ai vécu exactement le même problème et votre solution de contournement aide! – dbau

Questions connexes