Vad*_*off 3 keyboard uitextfield nsnotification ios
我有一个视图控制器,可以在 ViewWillAppear 上创建 UITextField firstResponder。通常我可以依靠 UIKeyboardWillShow 通知来检测键盘是否已显示,但如果我在键盘已经显示时进入当前视图控制器,则不会触发。
谁有想法?
我在调试视图层次结构时注意到,当键盘出现时,存在UIRemoteKeyboardWindow层次结构。
首先,我们可以向 UIApplication 添加扩展以检查窗口层次结构UIRemoteKeyboardWindow:
extension UIApplication {
var isKeyboardPresented: Bool {
if let keyboardWindowClass = NSClassFromString("UIRemoteKeyboardWindow"), self.windows.contains(where: { $0.isKind(of: keyboardWindowClass) }) {
return true
} else {
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在viewDidLoad,或需要的地方我们可以检查:
if UIApplication.shared.isKeyboardPresented {
print("Keyboard is presented")
}
Run Code Online (Sandbox Code Playgroud)
尽管此方法未经过全面测试并且UIRemoteKeyboardWindow位于私有标头中,但这NSClassFromString就是需要检查的原因。放心使用!