ams
ams

Reputation: 806

Allowing autorotation inside a programmatically created view that is displayed modally

This has been asked a dozen times on this site, but I haven't found an answer that works for me. I have an iPad application with a UISplitViewController on the root level that is created programmatically. Inside the view that is being displayed in the right hand pane, triggered by user interaction, a UINavigationController is programmatically created and presented to the user. Here is that code:

listenerController = [[UINavigationController alloc] initWithRootViewController:listenerView];
[listenerController.navigationBar setTintColor:[UIColor colorWithRed:185.0f/255.0f green:80.0f/255.0f blue:0.0f/255.0f alpha:1.0f]];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {                    
    [listenerController setModalPresentationStyle:UIModalPresentationFormSheet];
    [listenerController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [listenerController setModalInPopover:YES];
}

[self presentModalViewController:listenerController animated:YES];    
[listenerController release];

This does create the view controller properly, but when it is displayed the iPad is forced back into portrait view regardless of what orientation I have the iPad in. Then when I dismiss the modal window, it will rotate back.

I already have shouldAutorotateToInterfaceOrientation in the viewcontroller of the righthand pane set to YES, and I even tried adding this to the main app delegate class without any luck. It doesn't seem like I should have to subclass UINavigationController just to override the shouldAutorotateToInterfaceOrientation method.

Am I calling presentModalViewController from the wrong object? I've tried [self presentModalViewController ...] as well as [self.parentViewController presentModalViewController ...] with the same results.

Upvotes: 0

Views: 418

Answers (1)

Jason Moore
Jason Moore

Reputation: 7195

I'm assuming that the self in your code example is the right-view (detail) view controller. You need to call presentModalViewController from the root UISplitViewController.

Upvotes: 1

Related Questions