【发布时间】:2018-02-01 14:06:55
【问题描述】:
我需要展示一个覆盖打开键盘的帮助屏幕 - 帮助屏幕应该使下方的整个视图变暗,并仅保留一个完全透明的小孔以“突出显示”该部分。重点是提供一些关于几个视图组件的信息,同时突出显示它们。如果没有键盘,我可以将视图放在层次结构的顶部,但在这种情况下,UI 使用带有自定义输入附件的键盘,该附件需要可见。
我尝试插入一个新的UIWindow 并将其放在所有UIWindows 之上:
class CustomTextField: UITextField {
override var canResignFirstResponder: Bool {
return false
}
}
class ViewController: UIViewController {
var textField: UITextField = CustomTextField()
override func viewDidAppear(_ animated: Bool) {
view.backgroundColor = .white
super.viewDidAppear(animated)
textField.frame = CGRect(x: 0, y: 0, width: 200, height: 50)
view.addSubview(textField)
textField.backgroundColor = UIColor.gray
textField.becomeFirstResponder()
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 1) {
self.window.windowLevel = 100000002.0 // based on experiments with UIApplication.shared.windows this should be the top most window
let controller = UIViewController()
controller.view.backgroundColor = UIColor.black.withAlphaComponent(0.5)
self.window.rootViewController = controller
self.window.makeKeyAndVisible()
}
}
let window = UIWindow(frame: UIScreen.main.bounds)
}
但是这种方法有两个问题:
- 一旦窗口变为键且可见,键盘就会隐藏。
- 即使在使用
windowLevel = 100000002.0时,键盘似乎也位于窗口上方(键盘会进行动画处理,因此在隐藏时,我可以看到它位于窗口上方)。
任何想法如何处理这两个问题?有没有可能?
【问题讨论】:
-
这可能对你有帮助 - How to display UIView over keyboard in iOS
-
哇,你说得对……我怎么没找到?非常感谢!
-
@MilanNosáľ 您描述的两个问题与我遇到的两个问题完全相同。您会认为使用新窗口并将其设为键会使它显示在键盘上方,但可惜不是。为什么键盘一出现在屏幕上窗口就消失没有多大意义。您在下面的回答是帮助我解决这两个问题的原因。谢谢!!!