2010-06-04 5 views
0

BONJOUR,UINavigationController problème bouton retour

J'ai une application iPhone hybride qui a une UITabBarController et 5 onglets. Chaque onglet héberge un UINavigationViewController initialisé avec un contrôleur racine UIViewController qui héberge un UIWebView. Sur un certain lien spécifique, je pousse un UITableViewController inhérent au contrôleur de navigation (qui montre certaines données stockées localement) et possède un bouton de retour. Voici le code après avoir analysé la chaîne d'URL dans la méthode shouldStartLoadWithRequest:.

UINavigationController *navControl = (UINavigationController *)self.parentViewController; 
    CartTableViewController *tabView = [[CartTableViewController alloc] init]; 
    [navControl pushViewController:tabView animated:YES]; 
    navControl.navigationBar.hidden = NO; 
    return YES; 

Cela fonctionne très bien. Le lien spécifique est analysé et la vue de table est poussée sur la navigationStack. Quand je clique sur le bouton de retour (et oui, il montre 'retour' plutôt que le nom de la vue précédente qui est, disons 'nouvelles') j'obtiens une autre vue de table mais cette fois le bouton arrière s'appelle 'nouvelles'. et quand je clique dessus, je retourne à mon rootcontroller. Je ne trouve pas d'où deux vues sont poussées sur la pile au-dessus de la vue racine.

Merci. Zaki

+0

D'accord, j'ai trouvé le problème. Je dois retourner NO de shouldStartLoadWithRequest: pour une telle chose. Désolé pour la peine: $ – zakishaheen

+0

Vous devriez alors répondre à votre propre question, pour éviter que cette question ne soit considérée comme sans réponse. En outre, j'ai remarqué que vous avez une fuite de mémoire dans le code ci-dessus. Vous devriez libérer tabView après pushViewController. Le contrôleur de navigation le conservera. –

Répondre

0

D'accord, j'ai trouvé le problème. Je dois retourner NO de shouldStartLoadWithRequest: pour une telle chose. Désolé pour le dérangement

0

Votre implémentation de webView: shouldStartLoadWithRequest: navigationType est probablement appelé deux fois. Une solution consiste à créer et à pousser une instance de CartTableViewController uniquement si une instance n'est pas déjà dans la pile UINavigationController.

if (![navControl.topViewController isKindOfClass:[CartTableViewController class]]) { 
    CartTableViewController *tabView = [[[CartTableViewController alloc] init] autorelease]; 
    [navControl pushViewController:tabView animated:YES]; 
    navControl.navigationBar.hidden = NO; 
} 

Vous devriez également libérer votre instance de tabView.

Questions connexes