Orientierungsänderung benötigt, aber nur für einen von mehreren Ansichten in TabBarViewController

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

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

War es hilfreich?

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 
               );
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top