Orientation changement nécessaire, mais seulement pour une de plusieurs vues dans TabBarViewController
-
20-09-2019 - |
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
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 );
}