2010-01-06 6 views
6

J'ai un problème incroyablement frustrant qui semble être un bogue, mais j'ai beaucoup de mal à croire que personne d'autre n'est tombé sur ça. Le contrôleur de vue racine de mon application est un UITabBarController, où chaque onglet est un UINavigationController. Tout fonctionne bien.UINavigationController setViewController: animé: difficultés de la barre de navigation

Maintenant, je suis venu à un endroit où je veux modifier la pile, donc je réarranger les viewControllers du contrôleur de navigation en cours et faire:

[self.navigationController setViewControllers:newViewControllers animated:YES]; 

La pile est relevé/poussé correctement à la contrôleur de vue de dessus, mais la barre de navigation ne met pas à jour le contrôleur de vue en cours et semble rester exactement comme avec le viewController avant le pop. Si oui:

[self.navigationController popToViewController:someViewController animated:YES]; 

Tout fonctionne parfaitement. Est-ce que quelqu'un a déjà rencontré cela auparavant? Y at-il un travail autour? Quelque chose que je fais mal?

+1

Est-ce que ce bug - http://openradar.appspot.com/7470644 semble lié? – Anurag

+0

Oui! C'est exactement le même bug, mais cette solution est assez moche. Avez-vous trouvé une meilleure solution de contournement? – beinstein

+0

J'ai aussi ce bug. Très frustrant. –

Répondre

2

d'Apple semble avoir résolu ce dans le plus récent SDK

+1

Non, pas fixé dans Xcode 7.2.1 au moins. – turingtested

+0

avec Xcode 9.0 aussi je fais face au même problème. est-ce un bug? – damithH

1

Deux solutions de travail tout aussi laides.

D'abord, Si:

[self.navigationController popToViewController:someViewController animated:YES]; 

fonctionne bien, essayez de pousser un viewcontroller supplémentaire sur la pile puis appelez:

[self.navigationController popToViewController:someViewController animated:NO]; 

qui signifie que vous devriez obtenir à l'vc que vous voulez sans aucune animation .

En second lieu,

Avant de la pile, réglez le leftButtonBarItem = nul; Suppression efficace du bouton de l'ancien contrôleur de vue. En fait, si le titre est faux, changez-le aussi.

Ni l'un ni l'autre ne sont exactement propres mais peuvent vous donner les résultats désirés.

0

Vous pouvez également configurer votre contrôleur de vue racine comme le délégué du UINavigationController:

@interface YourViewController : UIViewController <UINavigationControllerDelegate> { 

puis dans la méthode déléguée didShowViewController vous définissez manuellement les contrôleurs de vue disponibles:

-(void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated { 
    [[viewController navigationController] setViewControllers:[[viewController navigationController] viewControllers]]; 
} 

Faites-moi savoir si cela fonctionne dans votre environnement!

-2
[self.navigationController setViewControllers:newViewControllers animated:NO]; 

cela peut vous aider.

4

J'ai fait face au même problème, il semble que Apple n'a pas corrigé ce bug et par conséquent la réponse sélectionnée de ce fil semble être incorrecte. J'ai réussi à corriger ce problème en utilisant this bug report comme dans le commentaire de Anurag combiné avec le commentaire de Scott Pfeil.

Voici le code:

navController.navigationBarHidden = YES; 

NSArray* viewControllers = navController.viewControllers; 
UIViewController* currentController = [viewControllers objectAtIndex:viewControllers.count-1]; 

NSArray *controllers = [NSArray arrayWithObjects: viewController , currentController , nil]; 

[navController setViewControllers:controllers animated:NO]; 

navController.navigationBarHidden = NO; 

J'appelle ce code dans la viewDidLoad du currentController et ce que je faisais est de remplacer les contrôleurs précédents avec seulement viewController.

Espérons que cela aide.

+2

Le fait de placer la barre de navigation sur "masqué" puis de l'afficher a corrigé cela pour moi. –

Questions connexes