0

Je l'ai presque fait dans toutes les applications mais j'ai 3 vues empilées dans navigationController et j'ai besoin de passer de la troisième vue à la première vue. Comme je comprends, je peux le faire via viewWillDisappear seulement. Mais si j'essaie ce "saut", j'obtiendrai le panneau de navigationController à partir de la deuxième vue, avec des boutons de navigation qui provoquent des exceptions/erreurs.Comment gérer backBarButtonItem?

P.S. Ne me conseille pas de faire en sorte que leftBarButtonitem ressemble à backBarButtonItem. C'est trop difficile et je ne sais pas où trouver une image appropriée pour cela.

Répondre

0

À ma connaissance, vous n'avez pas d'autre choix que de fournir le vôtre UIBarButtonItem. Vous n'êtes pas autorisé à interrompre le fonctionnement de UINavigationController par défaut. Autrement dit, vous ne pouvez pas remplacer le comportement du bouton de retour. Vous devez fournir un élément de bouton de barre personnalisé et le définir comme élément de bouton de barre gauche de l'élément de navigation.

(Comme une note de côté, le genre de comportement que vous cherchez peut-être une indication d'un modèle de navigation pauvres. Retour boutons doivent presque toujours revenir sur une séquence de hiérarchie de navigation.)

+0

mon autre idée est de dessiner un bouton transparent sur le backbarbutton. Cela pourrait être plus simple car je n'ai pas besoin d'une image spéciale et je n'ai pas besoin de connaître la taille exacte de ce bouton. – Gargo

+0

Cela semble être une solution acceptable pour vos besoins. – LucasTizma

0

Disons que dans navigation ordonnez vos vues empilées comme dessus -> 3 -> 2 -> 1. Lorsque vous êtes dans cette position, vous pouvez avoir un drapeau dans votre délégué de l'application qui vous montre sera doublePop quand backButton pressé comme ci-dessous: (Vous faites cela à chaque fois troisième point de vue apparaît dans l'ordre mentionné)

MyApplicationDelegate * del = [[UIApplication sharedApplication]delegate]; 
del.doublePopEnabled = YES; 
[del release]; 

Vu 2:

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 
     MyApplicationDelegate * del = [[UIApplication sharedApplication]delegate]; 
     if(del.doublePopEnabled){ 
      //Asssuming you have a reference to your navigationController in your view 2 
      del.doublePopEnabled = NO; 
      [del.release] 
      //Use animated as no if you don't want user to see doublePopping. 
      self.navigationController popViewControllerAnimated:NO]; 

      } 
} 

Espérons que cela aide.

Questions connexes