The launch page of my app is set to portrait only with this little bit of code:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait ;
}
When the app launches a UIAlertView
appears for username and password entry.
The method to display it is called from viewWillAppear
.
This worked fine for iOS6 but since iOS7, if I switch the device to landscape, the main view remains in portrait but the the alert view and keyboard rotate to landscape. A further bizarre quirk is that when I switch back to portrait, only the keyboard switches back (in truncated form), leaving the alert frozen in landscape mode:
Can anyone tell me how to prevent this?
-EDIT-
The autorotate code is called in a separate category:
@implementation UINavigationController (Orientation)
-(NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
-(BOOL)shouldAutorotate
{
if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) return NO;
else return YES;
}
@end
-EDIT 2-
I've also tried creating a Category on UIAlertView
but it's never called:
@implementation UIAlertView (Orientation)
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotate
{
return NO;
}
-EDIT 3-
I'm not sure how relevant this is but here's the code for showing the alert:
- (void)alertWithMessage:(NSString *)theMessage
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login"
message:theMessage
delegate:self
cancelButtonTitle:@"Login"
otherButtonTitles: nil];
[alert setAlertViewStyle:UIAlertViewStyleLoginAndPasswordInput];
UITextField *nameField = [alert textFieldAtIndex:0];
[alert show];
}