Orientation changement nécessaire, mais seulement pour une de plusieurs vues dans TabBarViewController

StackOverflow https://stackoverflow.com/questions/1341874

Question

My App a une UITabBarController avec cinq onglets. Je avais besoin de faire tourner les orientations que pour le cinquième onglet. Je suis en mesure d'obtenir tous les cinq à tourner au paysage par le sous-classement le UITabBarController

@implementation TabBarControllerRotate

-(BOOL)shouldAutorotateToInterfaceOrientation:
    (UIInterfaceOrientation)interfaceOrientation {

//return (interfaceOrientation == UIInterfaceOrientationPortrait);
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight 
          || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
          || interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

if(tbc == nil){
    //tbc = [[UITabBarController alloc] initWithNibName:nil bundle:nil];        
    tbc = [[TabBarControllerRotate alloc] initWithNibName:nil bundle:nil];  ////// new  //////

....

tbc.viewControllers = 
[NSArray arrayWithObjects:viewController1, viewController2, viewController3
 ,viewController4,viewController5, nil];

Je dois maintenant désactiver la rotation pour viewController1 - 4; J'ai essayé en vain de le faire en ajoutant le code suivant à quatre fichiers * .m ces viewControllers.

- (BOOL)shouldAutorotateToInterfaceOrientation:
    (UIInterfaceOrientation)interfaceOrientation {

return NO;
}

S'il vous plaît me conseiller sur la façon de R Terminé. Merci pour la lecture, Mark

Était-ce utile?

La solution

Je suppose qu'il existe d'autres moyens plus faciles à faire, mais j'ai finalement obtenu une solution. Le titre de la cinquième viewController dans le TabBarController, le seul qui doit changer d'orientation, est "MyNotes"

À l'intérieur de SubListViewController.m l'objet TabBarControllerRotate est créé.

  tbc = [[TabBarControllerRotate alloc] initWithNibName:nil bundle:nil];
  tbc.viewControllers = [NSArray arrayWithObjects:viewController1
          , viewController2, viewController3, viewController4, viewController5, nil
  tbc.delegate = self;

TabBarController UITabBarController et sous-classes comprend une propriété BOOL le nom bMyNotes.

SubListViewController est un UITabBarControllerDelegate

Chaque fois que la vue est modifiée dans le TabBarController un message est envoyé, à savoir   - (void) tabBarController: (UITabBarController *) tabBarController       didSelectViewController: (UIViewController *) viewController

Par conséquent SubListViewController.m contient ce code:

   #pragma mark UITabBarControllerDelegate methods

   - (void)tabBarController:(UITabBarController *)tabBarController 
        didSelectViewController:(UIViewController *)viewController{
    BOOL b = (viewController.title == @"MyNotes");
    [tbc setBMyNotesTab:b];
    //NSLog(@"MyNotesTab == %d", [tbc bMyNotesTab]);

   }

Alors TabBarControllerRotate.m contient:

    - (BOOL)shouldAutorotateToInterfaceOrientation:
          (UIInterfaceOrientation)interfaceOrientation {

        //NSLog(@"bMyNotesTab is: %d",self.bMyNotesTab);

        return ( (interfaceOrientation == UIInterfaceOrientationLandscapeRight 
            || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
            || interfaceOrientation == UIInterfaceOrientationPortrait
                 ) && self.bMyNotesTab 
               );
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top