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

Posted

技术标签:

【中文标题】尝试在 iOS 8 中以横向模式而不是纵向模式显示键盘【英文标题】:Trying to display keyboard in landscape mode instead of portrait mode in iOS 8 【发布时间】:2014-09-26 22:52:43 【问题描述】:

我有一个使用 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 上运行?

【问题讨论】:

您可以在 viewDidAppear 中尝试 [UIViewController attemptRotationToDeviceOrientation] 并在此之后立即设置第一响应者 感谢布伦丹的回复。我试过这个,但不幸的是它没有用。 【参考方案1】:

试试这个。

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

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


【讨论】:

将第一行 ([[UIDevice currentDevice] setValue:...];) 添加到 viewWillAppear 为我在 iOS 8 中修复了键盘方向,谢谢! 我也使用了[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger: UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"]; 来解决我的问题,但是如果你想使用UIDeviceOrientationLandscapeLeft而不是UIInterfaceOrientationLandscapeLeft,你必须知道UIDeviceOrientationLandscapeLeft 等于UIInterfaceOrientationLandscapeRight,反之亦然!

以上是关于尝试在 iOS 8 中以横向模式而不是纵向模式显示键盘的主要内容,如果未能解决你的问题,请参考以下文章

在仅纵向应用程序中以横向模式添加子视图

在 iPhone 中,键盘以纵向模式出现,而不是横向模式。有啥解决办法吗?

在 ios 8 中以横向模式隐藏并在 xCode 6 中发布 ios 8 后尝试在 ios 7 中正常工作的状态栏问题

当屏幕处于横向模式时,UIAlertview 以纵向模式显示

我只想要一个屏幕处于纵向模式,而所有其他屏幕都处于横向和纵向模式 ios 9 应用程序

AS3 - 仅 iOS 强制横向模式?