Prise en charge du paysage pour une seule vue dans UINavigationController
J'ai une manette de navigation qui ont un point de vue peu contrôleurs. J'ai besoin à l'appui de toutes les orientations pour l'affichage de toutes les manettes, à l'exception d'un point de vue spécifique contrôleur qui prend en charge uniquement le paysage. De ce point de vue spécifique du contrôleur s'affiche au milieu de la pile de navigation. J'ai fait beaucoup de recherche mais je ne pouvais pas trouver une bonne solution. Voici les liens que j'ai lu et essayé.
Comment faire pivoter l'écran en mode paysage?
Comment pivoter automatiquement du mode portrait au mode paysage?
iPhone - de permettre l'orientation paysage sur un viewcontroller
http://goodliffe.blogspot.com/2009/12/iphone-forcing-uiview-to-reorientate.html
Prochaine je vais essayer de remplacer la manette de navigation avec presentModalViewController
afin d'afficher la vue du contrôleur. Ensuite je vais créer un nouveau mode de navigation, contrôleur à l'intérieur de la vue contrôleur de pousser la subséquente de vue des contrôleurs.
Si quelqu'un a une meilleure idée, s'il vous plaît laissez-moi savoir. Vraiment apprécié!
Mise à JOUR: j'ai réussi à utiliser la méthode que j'ai décrite ci-dessus: remplacer pushViewController
avec presentModalViewController
et de créer une nouvelle manette de navigation.
source d'informationauteur PokerIncome.com
Vous devez vous connecter pour publier un commentaire.
Chaque vue-contrôleur poussé sur la navigation des contrôleurs de pile ont à prendre en charge les mêmes orientations. Cela signifie qu'il n'est pas possible d'avoir une " vue " que les contrôleurs de soutien portrait et d'autres ne supportant paysage. En d'autres termes, tous les contrôleurs de vue sur la même manette de navigation de la pile doit renvoyer le même délégué:
Mais il y a une solution simple à ce! Voici un exemple pour passer du mode portrait au mode paysage. Voici les étapes pour le faire et voici le code pour le soutenir.
UINavigationController
ajouter une instance de ‘faux’ - vue-contrôleur en tant que root et une instance de votre paysage-vue-contrôleur comme second point de vue contrôleurUINavigationController
instance comme modale de la vue parent contrôleurTout d'abord, créez une nouvelle vue-contrôleur (FakeRootViewController) avec ce code:
Voici le code à présenter le point de vue du contrôleur que vous souhaitez afficher en mode paysage:
Rappelez-vous que le landscapeViewController devrait également avoir cette mise en œuvre:
Il y a une API privée pour forcer un changement d'orientation. A mettre dans vos poussé à la vue du contrôleur de
-viewWillAppear:
:Pour supprimer le message d'avertissement du compilateur, ajoutez à cela l' .m fichier de votre vue-contrôleur:
Comme toujours, il y a un risque d'être rejeté, et un risque de rupture dans les futures versions du système d'exploitation lors de l'utilisation privée de l'Api. Faites à vos propres risques!
En général, la présentation d'un modal-vue-contrôleur est la meilleure solution dans la plupart des cas.
Vous pouvez faire des actions:
Modifier Votre code avec l'accord des schellsan suggestion, la prochaine
Essayez d'ajouter currentViewController(qui va pousser à la navigation viewController), des biens de appDelegate. Lorsque Vous essayez de pousser-vue-contrôleur, réglez-le à la vue actuelle du contrôleur avant cette. La prochaine faire une sous-classe de rootViewController dans la manette de navigation. Dans la présente sous-classe owerload méthode
Il devrait fonctionner si Vous n'êtes pas à l'aide d'une barre de navigation et le pousse à nouveau contrôleur après avoir mis un vieux
Il devrait être aussi simple que la mise en œuvre de
dans chaque
UIViewController
poussé dans votreUINavigationController
. Dans le cas où unUIViewController
'ne devrait pas faire pivoter,return NO
pour l'orientation dans l'UIViewController
.Il y a un piège là en revanche, si votre
UINavigationController
implémenteil bloquera son viewControllers à partir de la réception de cette méthode. Dans ce cas, vous devez transmettre le message à l'topViewController à l'aide de
Vous pouvez essayer ce code dans votre
UINavigationController
d'appeler le courant d'affichage visible de l'shouldAutorotateToInterfaceOrientation
. Dans mon cas, j'ai leUINavigationController
dans unUITabBarController
mais vous pouvez probablement s'adapter à d'autres cas.