【发布时间】:2013-11-07 10:10:56
【问题描述】:
我的应用程序的启动页面设置为 portrait 仅使用以下代码:
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait ;
}
当应用程序启动时,会出现 UIAlertView 用于输入用户名和密码。
显示它的方法是从viewWillAppear调用的。
这在 iOS6 上工作得很好,但是从 iOS7 开始,如果我将设备切换到横向,主视图仍然是纵向的,但警报视图和键盘会旋转到横向. 另一个奇怪的怪癖是,当我切换回纵向时,只有键盘切换回来(以截断形式),使警报在横向模式下冻结:
谁能告诉我如何防止这种情况发生?
-编辑-
自动旋转代码在单独的类别中调用:
@implementation UINavigationController (Orientation)
-(NSUInteger)supportedInterfaceOrientations
{
return [self.topViewController supportedInterfaceOrientations];
}
-(BOOL)shouldAutorotate
{
if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) return NO;
else return YES;
}
@结束
-编辑 2-
我也尝试在 UIAlertView 上创建一个类别,但它从未被调用:
@implementation UIAlertView (Orientation)
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotate
{
return NO;
}
-编辑 3-
我不确定这有多相关,但这里是显示警报的代码:
- (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];
}
【问题讨论】:
-
您说“应用程序启动时”。究竟是什么时候?你用什么方法调用
alertWithMessage:? -
它是从
viewWillAppear调用的。我会更新问题。 -
尝试在
viewDidAppear:中进行操作。不确定这是否会有所作为,但我以前见过这样的怪事。 -
谢谢!曾在
viewDidLoad中尝试过,并误读了您的评论,认为这就是您的意思。刚刚在viewDidAppear中尝试过,它成功了。为您的 cmets +1,如果您将它们作为答案发布,我会接受。
标签: ios uialertview autorotate device-orientation