2009-10-03 7 views
0

J'ai une action "didSelectRowAtIndexPath" qui ajoute une barre de navigation et affiche une nouvelle vue. Il y a une action dans la nouvelle vue qui pousse une autre vue sur la pile de navigation, et cela fonctionne, mais cliquer sur "retour" ne restaure pas la vue précédente.Le bouton Précédent de UINavigationItem retourne à l'élément de navigation précédent, mais l'affichage ne change pas

La séquence est essentiellement:

  • utilisateur clique sur la table cellule
  • Barre de navigation apparaît, avec une nouvelle vue en dessous, montrant un certain HTML avec des liens
  • utilisateur clique sur un lien et une nouvelle vue est ajoutée à nav, avec un bouton de retour
  • utilisateur clique sur le bouton retour, nav annule correctement, mais vue ne change pas

La nouvelle vue est ajoutée en capturant un clic sur un lien comme ceci:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
if(navigationType == UIWebViewNavigationTypeLinkClicked) { 
    UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"webpage"]; 
    [flipsideNavigationBar pushNavigationItem:navigationItem animated:YES]; 
    [navigationItem release]; 

    WebViewController *viewController = [[WebViewController alloc] initWithNibName:@"webView" bundle:nil]; 
    UIView *webPageView = self.webViewController.view; 
    [webPageView addSubview:viewController.view]; 
    [webPageView insertSubview:flipsideNavigationBar aboveSubview:viewController.view]; 
    [[viewController.view.subviews objectAtIndex:1] loadRequest:request]; 
    [webView stopLoading]; 
    return YES; 
} 
return YES; 
} 

Je ne sais pas ce que je fais mal; ce qui devrait arriver est le bouton "retour" devrait rejeter la vue actuelle et revenir à la précédente. Quelqu'un peut-il suggérer quelque chose à essayer?

Merci!

John

Répondre

0

La méthode recommandée pour le faire est de simplement utiliser un UINavigationController et pousser UIViewController s sur la pile, soit modal ou non modal.

Si vous souhaitez coller avec votre solution personnalisée, vous devez définir un delegate pour votre UINavigationBar et mettre en œuvre ses shouldPopItem: ou didPopItem: méthodes. Documentation link

+0

merci pour le bon info. Il a fallu un peu de réécriture, mais maintenant ça marche. – John

Questions connexes