11

J'ai une application iPhone que je suis en train de convertir en un universal binary pour fonctionner avec l'iPad. J'ai réussi à mettre en œuvre tout ce dont j'ai besoin en termes de mise en page afin que la fonctionnalité paysage complet soit désormais prise en charge dans mon application (auparavant, j'utilisais principalement le mode portrait pour afficher du contenu). Mais, j'ai un problème étrange, et cela se produit UNIQUEMENT en mode paysage: quand je pousse un contrôleur de vue sur la pile, il faut deux pressions sur le bouton retour pour revenir au contrôleur de vue précédente! Le premier tap montre une vue vide, mais avec le même nom sur le bouton de navigation arrière gauche, le second appui ramène le contrôleur à la vue précédente comme il se doit.UINavigationController problèmes de pile de navigation en mode paysage

Je n'ai pas d'iPad à tester, donc je compte sur le simulateur. Le problème n'apparaît pas sur l'iPhone et n'apparaît pas si vous revenez en mode portrait.

Mon application se compose d'un tabbarcontroller avec les contrôleurs de navigation chargé pour son VCs:

//application delegate 
- (void)applicationDidFinishLaunching:(UIApplication *)application 
//.... 
WebHelpViewController *vc8 = [[WebHelpViewController alloc] init]; 
UINavigationController *nv8 = [[UINavigationController alloc] initWithRootViewController:vc8]; 

[self.tabBarController setViewControllers:[NSArray arrayWithObjects:nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nil]]; 

Pour mettre en œuvre la capacité du paysage, la UITabBarController est surchargée à autorotation en cas de besoin:

//CustomTabBarController.m 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return [[(UINavigationController *)self.selectedViewController topViewController] shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 

... œuvres bien. Je navigue dans de nouvelles vues en utilisant cette méthode

SomeViewController *vc = [[SomeViewController alloc] init]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

Est-ce seulement une erreur de simulation? Comment puis-je résoudre ce problème?

Répondre

10

Cela ressemble à une autre ViewController répond à:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

Vérifiez ce premier.

+1

Merci mon pote, c'était le problème. Je devais m'assurer que tous mes ViewControllers implémentés - (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation; –

+0

Si vous utilisez 'CMD + N' pour créer de nouveaux' UIViewControllers' dans XCode, cette méthode est l'une des valeurs par défaut incluses dans le modèle. – Sneakyness

+0

grrr Je suis confronté exactement au même genre de problème: je présente un contrôleur de navigation comme modal et ensuite je pousse certains ViewControllers. Le navController et tous les contrôleurs poussés renvoient YES à shouldAutorotateToInterfaceOrientation, mais en mode paysage, je dois appuyer deux fois sur "back" pour que la barre de navigation soit correctement mise à jour:/any idea? – yonel