Orientierungsänderung benötigt, aber nur für einen von mehreren Ansichten in TabBarViewController
-
20-09-2019 - |
Frage
Meine App hat einen UITabBarController mit fünf Registerkarten. Ich musste drehen Orientierungen nur für den fünften Reiter. Ich war in der Lage, alle fünf zu drehen, um Landschaft zu erhalten, indem Subklassen die 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];
Ich brauche jetzt die Rotation für viewController1 auszuschalten - 4; Ich versuchte dies erfolglos durch zu den vier * .m Dateien hinzufügen den folgenden Code zu tun diese Viewcontrollers.
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return NO;
}
Bitte geben Sie mir, wie R getan. Danke fürs Lesen, Mark
Lösung
Ich nehme an, es gibt auch andere einfachere Wege, dies zu tun, aber ich habe endlich eine Lösung. Der Titel des fünften Viewcontroller in dem TabBarController, die einzige dass Bedürfnisse Orientierung zu ändern, ist „MyNotes“
Innerhalb von SubListViewController.m das TabBarControllerRotate Objekt erstellt wird.
tbc = [[TabBarControllerRotate alloc] initWithNibName:nil bundle:nil]; tbc.viewControllers = [NSArray arrayWithObjects:viewController1 , viewController2, viewController3, viewController4, viewController5, nil tbc.delegate = self;
TabBarController Unterklassen UITabBarController und enthält eine BOOL Eigenschaft nennen bMyNotes.
SubListViewController ist ein UITabBarControllerDelegate
Jedes Mal, wenn der Blick in den TabBarController geändert wird eine Nachricht gesendet wird, nämlich - (void) TabBarController: (UITabBarController *) TabBarController didSelectViewController: (UIViewController *) Viewcontroller
Daher SubListViewController.m enthält diesen 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]); }
Dann TabBarControllerRotate.m enthält:
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation { //NSLog(@"bMyNotesTab is: %d",self.bMyNotesTab); return ( (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationPortrait ) && self.bMyNotesTab );
}