在iOS 8中尝试以横向模式而不是纵向模式显示键盘

时间:2014-09-26 22:52:44

标签: ios objective-c uiviewcontroller uinavigationcontroller

我有一个使用iOS7制作的iPad项目,它在横向模式下一度显示一个视图控制器。在这个视图控制器上,有一个UITextField,它是屏幕上的第一个响应者,因此当用户进入该屏幕时,应该立即显示键盘,它就是这样。

但问题是,在iOS 8中以横向模式显示视图控制器时,键盘正在以纵向模式显示。如何更正此键盘,使键盘的方向与视图控制器(仍然以横向模式正确显示)?仅供记录,此视图特别使用.xib文件,而不是故事板。

以下是我的代码:

MyLandscapeViewController.m

相关方法:

-(BOOL)shouldAutorotate {
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscape;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeLeft;
}


- (void)viewDidUnload {
    [self setKeyboardButton:nil];
    [super viewDidUnload];
}

对于视图控制器,我创建了一个自定义导航控制器:

MyNavigationController.m

-(BOOL)shouldAutorotate{
    return [self.topViewController shouldAutorotate];
}

-(NSUInteger)supportedInterfaceOrientations{
    return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return [self.topViewController preferredInterfaceOrientationForPresentation];
}

从我的应用程序中,它被调用如下:

MyLandscapeViewController *myView = [[MyLandscapeViewController alloc] initWithNibName:@"MyLandscapeViewController" bundle:nil];

    MyNavigationController *navigationController = [[MyNavigationController alloc] initWithRootViewController:myView];
    [self.rootViewController presentViewController:navigationController animated:YES completion:nil];

我需要做哪些更改才能在iOS 8上运行?

1 个答案:

答案 0 :(得分:2)

试试这个。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"];
    [UIViewController attemptRotationToDeviceOrientation];

}