Orientamento cambiamento necessario, ma solo per una delle diverse opinioni in TabBarViewController
-
20-09-2019 - |
Domanda
Il mio App ha un UITabBarController con cinque schede. Avevo bisogno di ruotare orientamenti solo per la quinta scheda. Sono stato in grado di ottenere tutti e cinque a ruotare in orizzontale sottoclassi l'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];
ho bisogno ora di spegnere la rotazione viewController1 - 4; Ho cercato invano di farlo aggiungendo il seguente codice per i quattro file * .m per questi viewControllers.
- (BOOL)shouldAutorotateToInterfaceOrientation:
(UIInterfaceOrientation)interfaceOrientation {
return NO;
}
Si prega di avvisare me su come ottenere R Done. Grazie per la lettura, Mark
Soluzione
presumo ci sono altri modi più facili per fare questo, ma finalmente ho avuto una soluzione. Il titolo del quinto viewController nel TabBarController, l'unico che ha la necessità di modificare l'orientamento, è "MyNotes"
All'interno di SubListViewController.m viene creato l'oggetto TabBarControllerRotate.
tbc = [[TabBarControllerRotate alloc] initWithNibName:nil bundle:nil]; tbc.viewControllers = [NSArray arrayWithObjects:viewController1 , viewController2, viewController3, viewController4, viewController5, nil tbc.delegate = self;
TabBarController sottoclassi UITabBarController e include una proprietà BOOL nome bMyNotes.
SubListViewController è un UITabBarControllerDelegate
Ogni volta che la vista è cambiata nel TabBarController viene inviato un messaggio, vale a dire - (void) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) viewController
Quindi SubListViewController.m contiene questo codice:
#pragma mark UITabBarControllerDelegate methods - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ BOOL b = (viewController.title == @"MyNotes"); [tbc setBMyNotesTab:b]; //NSLog(@"MyNotesTab == %d", [tbc bMyNotesTab]); }
Poi TabBarControllerRotate.m contiene:
- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation { //NSLog(@"bMyNotesTab is: %d",self.bMyNotesTab); return ( (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationPortrait ) && self.bMyNotesTab );
}