gpt4 book ai didi

ios - 如何可靠地检测 iOS 9 上是否连接了外部键盘?

转载 作者:IT王子 更新时间:2023-10-29 07:46:27 26 4
gpt4 key购买 nike

在 iOS 9 之前,确定是否连接外部键盘的最可靠方法是监听 UIKeyboardWillShowNotification 并将文本字段设置为第一响应者,如 this question 中所述。 .使用虚拟键盘时会触发通知,但不会在使用外部键盘时触发。

但是,此行为现在已随 iOS 9 发生变化。UIKeyboardWillShowNotification 也会在连接外部键盘时触发,因为现在会显示新的键盘工具栏。

仍然可以检测键盘高度,判断显示的是较小的工具栏还是较大的虚拟键盘。然而,这种方法并不可靠,因为键盘高度在各个测试版之间发生了变化,并且不能指望随着时间的推移保持不变。

是否有更可靠的方法可以与 iOS 9 一起使用?

最佳答案

回到最初的问题后,我找到了一个可行的解决方案。

当显示常规虚拟键盘时,键盘框架似乎在屏幕尺寸范围内。但是,当连接物理键盘并显示键盘工具栏时,键盘框架位于屏幕外。我们可以检查键盘框架是否在屏幕外,以确定是否显示键盘工具栏。

objective-C

- (void) keyboardWillShow:(NSNotification *)notification {
NSDictionary* userInfo = [notification userInfo];
CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect keyboard = [self.view convertRect:keyboardFrame fromView:self.view.window];
CGFloat height = self.view.frame.size.height;

if ((keyboard.origin.y + keyboard.size.height) > height) {
self.hasKeyboard = YES;
}
}

swift

@objc func keyboardWillShow(_ notification: NSNotification) {
guard let userInfo = notification.userInfo else {return}
let keyboardScreenEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let keyboard = self.view.convert(keyboardScreenEndFrame, from: self.view.window)
let height = self.view.frame.size.height
if (keyboard.origin.y + keyboard.size.height) > height {
self.hasKeyboard = true
}
}

关于ios - 如何可靠地检测 iOS 9 上是否连接了外部键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31991873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com