0

Je veux verrouiller l'orientation dans quelques UIViewControllerverrouillage d'orientation en UINavigationController avec UITabBar

1) LoginView (portrait de support uniquement) UIViewController ayant bouton de connexion

2) Le bouton de connexion i appelle UITabBarController de story-board, ayant 3tabs tous les onglets sont incorporés UINavigationControllers. (Tab1, Tab2, Tab3)

3) Sur Tab1 (support paysage et portrait) ayant bouton button1, à partir de laquelle je suis pousser une démonstration UIViewcontroller (portrait de soutien seulement). comme ci-dessous

Demo *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"Demo"]; 
    vc.hidesBottomBarWhenPushed = YES; 
    [self.navigationController pushViewController:vc animated:YES]; 

La démonstration est chargé avec succès, mais je veux verrouiller sa rotation portrait si je crée une catégorie de UINavigationController, mais toujours en rotation.

#import <UIKit/UIKit.h> 

@interface UINavigationController (Orientation) 

@end 

// ==========

#import "UINavigationController+Orientation.h" 
@implementation UINavigationController (Orientation) 
-(BOOL)shouldAutorotate 
{ 

    return YES; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationPortraitUpsideDown;; 
} 
@end 

// ------- Dans mon UIViewController de démonstration i mais au-dessous du code, mais il n'a jamais appelé --- -----

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 
-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationPortrait; 
} 

Je lis beaucoup, mais après non de les aider, S'il vous plaît Aidez-moi comment puis-je le faire?

Répondre

1

orientation initiale définie comme Portrait seulement dans les cibles -> Général -> Informations de déploiement (Voir image ci-dessous)

enter image description here

Dans AppDelegate.h déclare la propriété:

@property (assign, nonatomic) BOOL shouldRotate; 

Dans AppDelegate.m define

-(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { 
    if (self.shouldRotate) 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    else 
     return UIInterfaceOrientationMaskPortrait; 
} 

Dans UIViewController Implemenatation set valeur shouldRotate comme:

Si vous souhaitez faire pivoter puis réglez OUI

-(void) viewDidAppear:(BOOL)animated { 
     [super viewDidAppear:animated]; 
     [(AppDelegate *)[[UIApplication sharedApplication] delegate] setShouldRotate:YES]; 
    } 

mis sinon NO

-(void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [(AppDelegate *)[[UIApplication sharedApplication] delegate] setShouldRotate:NO]; 
} 

Remarque:setShouldRotate: appelez toujours viewDidAppear:. Donc, chaque fois que vous changez le UIViewController, cela fonctionnera correctement.

Espérons que cela fonctionnera pour vous. Tout le meilleur :)

+0

merci yeshica ... pour l'aide ... mais si l'utilisateur en mode paysage puis la vue de saut également montré dans le paysage .... – iphonemaclover

+0

@iphonemaclover: valeur de 'setShouldRotate' comme' NON 'en cela ViewController 'viewDidAppear 'méthode. – yashica15

+0

@iphonemaclover: Si vous avez trouvé ce code utile, ne marquez pas simplement Merci. – yashica15