尝试在 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 以纵向模式显示