防止在presentViewController上隐藏键盘(显示弹出窗口)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止在presentViewController上隐藏键盘(显示弹出窗口)相关的知识,希望对你有一定的参考价值。
有一个UITextView视图。 UITextView是键盘唯一可能的firstResponder。我们称之为“BackView”。
另一个视图是PopUp(具有透明背景的全屏视图,其淡化底层视图)。我们称之为“PopUp”。
PopUp工作正常,除非键盘在屏幕上。呈现PopUp强制键盘被隐藏,当PopUp被解除时,键盘再次显示。由于PopUp没有覆盖整个BackView,因此效果不佳。
在显示PopUp时,有没有办法在BackView上保持键盘? (弹出窗口无需使用键盘)。
PopUp包含:
- 全屏幕视图与背景设置为黑色与alpha(淡入底层视图)
- 几个图像,标签和关闭按钮。
PopUp显示为:
[self setModalPresentationStyle:UIModalPresentationCurrentContext];
[self presentViewController:vc animated:YES completion:nil];
找到解决方案
将PopUp视图添加为当前窗口的子视图
答案
节目:
if let popupVC = storyboard.instantiateViewControllerWithIdentifier("PopupVC") as? PopupVC
{
var frame = UIScreen.mainScreen().bounds
frame.origin.y = frame.size.height
overlayWindow = UIWindow(frame: frame)
popupVC.overlayWindow = overlayWindow
overlayWindow.windowLevel = UIWindowLevelAlert
overlayWindow.rootViewController = popupVC
overlayWindow.makeKeyAndVisible()
UIView.animateWithDuration(0.3, animations:
{
self.overlayWindow.frame.origin.y = 0
})
}
隐藏在PopupVC中
if let window = overlayWindow
{
UIView.animateWithDuration(0.3, animations: {
window.frame.origin.y = window.frame.height
}, completion: { (finished) -> Void in
self.overlayWindow = nil
})
}
另一答案
mb.server回答了他自己的问题(我也有一个问题)。但我只想明确地为其他人的利益拼写代码:
//instantiate popUpVC, then
popUpVC.view.frame = [UIScreen mainScreen].bounds; //assuming you wish the popover to occupy the entire screen; adjust as needed
UIWindow* currentWindow = [[[UIApplication sharedApplication] windows] lastObject];
[currentWindow addSubview:popUpVC.view];
以上是关于防止在presentViewController上隐藏键盘(显示弹出窗口)的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上,presentViewController 会导致溢出(如堆栈溢出)吗?
presentViewController 不隐藏弹出框,弹出框出现在呈现的模态视图上
presentViewController 在 iPad 上崩溃,但在 iPhone 上不崩溃
presentViewController 不显示呈现视图控制器上的所有元素