Orientamento cambiamento necessario, ma solo per una delle diverse opinioni in TabBarViewController

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

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

È stato utile?

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 
               );
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top