jonathanwiesel
jonathanwiesel

Reputation: 1034

iOS6 landscape app with only one controller multioriented popViewController issue

I have this setup to support only landscape orientation in most of my viewcontrollers

My app delegate has this piece of code:

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
 {
     NSUInteger orientations = UIInterfaceOrientationMaskLandscape;
    if (self.window.rootViewController) {
        UIViewController * pressented = [[((UINavigationController *)self.window.rootViewController) viewControllers] lastObject];
        orientations =[pressented supportedInterfaceOrientations];
    }
    return orientations;
 }

And in most viewcontrollers this:

-(NSUInteger)supportedInterfaceOrientations
 {
    return UIInterfaceOrientationMaskLandscape;
 }

My problem comes when I push THIS controller (the one I would like to rotate):

-(NSUInteger)supportedInterfaceOrientations
 {
    return UIInterfaceOrientationMaskALL;
 }

It rotates perfectly BUT when I pop the viewcontroller (tap the back button of the navigation bar) with the orientation in portrait, the presenting viewcontroller also sets it's orientation to Portrait.

How can I make the presenting viewcontroller stays locked on landscape, or force the problematic controller to rotate back to landscape before popping.

Upvotes: 2

Views: 320

Answers (1)

Felix
Felix

Reputation: 35394

Add this to your portrait view controller:

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    UIViewController* dummyController = [[UIViewController alloc] init];
    [self presentViewController:dummyController animated:NO completion:^{
        [self dismissViewControllerAnimated:NO completion:nil];
    }];
}

I know it's a hack, but it works. Anyone knows a better solution?

Upvotes: 1

Related Questions