views:

26

answers:

1

I have a reasonably simple split view application adapted from iPhone code. The main functionality is in shared classes with iPhone and iPad specific classes inheriting and augmenting the code. All the classes used in the iPad app have the following:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Overriden to allow any orientation.
    return YES;
}

The main view controller consists of a UIToolbar and a UITableView. The responds to rotations correctly at every stage bar two. If I present a modal dialog from this view:


 navigationController = [[UINavigationController alloc] initWithRootViewController:tvc];
 navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
 [self presentModalViewController:navigationController animated:NO];

Everything works as expected including rotating the device until I dismiss the dialog in any way with:

 [self dismissModalViewControllerAnimated:YES];

At which point my main view rotates 90 degrees. I've looked into the settings in nib files and it all seems to be fine. Any advice? A modal dialog presented by the UITableView on the left hand side does not present this problem.

Bonus Question:

I've discovered the modal dialog presented by the left hand view does have a glitch. But only one. If it is presented by the popover view in portrait mode and the device is rotated you get a rather impressive graphical glitch as it rotates out of the view for ever!

A: 

As noted in the comment above I managed to merge the two view controllers into one, incorporating the code to handle the toolbar + splitview controller into the iPad version. Originally there was a common class which inherited from UITableViewController, both the iPad and iPhone versions of the code inherited from this common class. The problem was on the iPad I wanted a toolbar at the top and had to support the splitview controller too. This was problematic given that the class was a UITableViewController so I created a parent class containing the toolbar and the tableview controller plus the splitview code. In refactoring I changed the common class to a UIViewController and made the changes to support a UITableView in code, as normal and instructed in several iPhone dev books. In the iPhone version of class I manually create the UITableView with the necessary methods. In the iPad version it comes from a xib file. This schematically simplifies things as now the main view doesn't have a controller within a controller. It also solves the problem. The UI rotating 90 degrees upon closing a modal dialog no longer occurs.

Diziet

related questions