2011-07-23 2 views
0

J'ai un bug étrange dans mon code lorsque je travaille sur une application pour iPhone. Je crée un contrôleur de navigation et le place dans mon contrôleur de barre d'onglets et puis quand je passe de mon écran initial à un écran secondaire le bouton de retour sur l'écran secondaire pointe sur lui-même. Ainsi, lorsque vous appuyez sur le bouton, il se recharge tout seul et la prochaine fois qu'il est pressé, il revient au premier écran.Le bouton Précédent de uinavigationcontroller recharge l'écran actuellement chargé

UINavigationController *nav1 = [[UINavigationController alloc] init]; 

// create the initial views for each nav controller 
SearchViewController *searchView = [[SearchViewController alloc] init]; 
searchView.title = @"Search"; 


//place all the viewcontrollers on the nav controllers ready to view 
[nav1 pushViewController: searchView animated:NO]; 


//create tab bar out of above nav controllers 

UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Search" image:[UIImage imageNamed:@"search.png"] tag:0]; 
nav1.tabBarItem = item; 

UITabBarController *tbc = [[UITabBarController alloc] init]; 
     tbc.viewControllers = [NSArray arrayWithObjects:nav1, nil]; 
    //  
[nav1 release]; 

code ci-dessus est en appdelegate pour la configuration initiale du dispositif de commande de navigation + onglet

SecondScreenViewController *sVC = [[SecondScreenViewController alloc] init]; 

sVC.title = @"Screen 2"; 
[self.navigationController pushViewController:sVC animated:YES]; 
[sVC release]; 

ci-dessus est le code dans le dispositif de commande d'affichage de recherche qui charge le second écran/viewcontroller au dispositif de commande de navigation. Mais le bouton de retour en haut de l'écran 2 a le mot écran 2 et quand je l'appuie une fois qu'il se recharge et ensuite le bouton de retour dit recherche (qui est le titre du premier écran). cette fois, le presser le ramène au premier écran. Im juste confondu pourquoi le bouton de retour affiche le propre nom de titre des contrôleurs de vue et recharge lui-même. Je n'ai tout autre code dans ces écrans vraiment, ils ne sont que des écrans vides avec des étiquettes affichant quel écran est là alors que j'apprendre à utiliser correctement

+0

Comme quelqu'un de bien vouloir me fit remarquer dans l'une de mes questions, vous pouvez utiliser self.navigationController.viewControllers pour voir ce que vous avez fait sur votre pile de navigation. Peut-être qu'il y a quelque chose de louche ici. – Monolo

+0

Bravo pour le pourboire. cela me montre que mon deuxième contrôleur de vue est en train d'être chargé deux fois. maintenant pour suivre cela – TiltedWindmill

Répondre

1

dans la documentation Apple pour UINavigationController pour l'initialiseur désigné

- (id)initWithRootViewController:(UIViewController *)rootViewController 

il est dit que:

Chaque pile de navigation doit avoir au moins un contrôleur de vue d'agir comme la racine.

Je vous recommande d'essayer d'initialiser votre UINavigationController avec un rootViewController.

0

TiltedWindmill, j'ai déjà rencontré ce problème. Dans mon cas, dans ma tête, je voulais faire:

(> = pousser contrôleur de vue)

Retour aux MapViewController> Détails à propos d'une activité pour une broche cliqué sur la carte> MapViewController> Puis pousser une autre DetailsViewController.

Dans mon MapViewController, ce contrôleur de vue a été enregistré pour une notification. Théoriquement, je pensais que je naviguais comme ça. Carte> Détails Vue Contrôleur> Carte> Vue Détails Contrôleur. La chose était, chaque fois que je tapais sur la broche sur la carte, la notification a été déclenchée et les deux copies de MapViewController qui était sur la pile de navigation ont répondu à la notification. En conséquence, il a poussé deux copies du même DetailsViewController. Donc, la vraie navigation était comme ça:

Carte> Détails View Controller> Carte> Détails View Controller Copie1 + DetailsViewController copy2

*> = détails second point de vue contrôleur a été poussé juste au dessus de la précédente, mais pas visible à la œil. Lorsque je suis allé appuyer sur le bouton de retour, il est sorti DetailsViewController copy2 et a montré le même contrôleur de vue (DetailsViewController copy1).

Je l'ai corrigé en disant à mon MapViewController de se désabonner de la notification sur l'événement viewDidDisappear.

Je ne sais pas si vous avez compris que: P

Questions connexes