键盘上的 QuickType 栏
Posted
技术标签:
【中文标题】键盘上的 QuickType 栏【英文标题】:QuickType Bar on the Keyboard 【发布时间】:2014-09-25 09:26:25 【问题描述】:大家可能都知道键盘上的新快速输入栏。
在我的应用程序中,我在键盘上放置了一个自定义 TextView 栏。但是由于 QuickType Bar ,我的文本视图被隐藏了。
我想知道,有没有什么属性或方法可以知道QuickType Bar是否打开?
【问题讨论】:
【参考方案1】:没有什么可以告诉您 QuickType 栏是否处于活动状态,但您可以使用此代码注册UIKeyboardWillChangeFrameNotification
通知,然后您可以获得有关键盘高度的信息。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];
使用传递的userInfo
字典中的UIKeyboardFrameBeginUserInfoKey
和UIKeyboardFrameEndUserInfoKey
值来检索键盘的当前和未来帧。可以参考以下代码。
- (void)keyboardWillChangeFrame:(NSNotification*)notification
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue];
// Manage your other frame changes
希望这会有所帮助。每次键盘更改其框架时都会调用它。
【讨论】:
谢谢@Bhumit。我也尝试过 UIKeyboardDidChangeFrameNotification 。我在下面发布我的尝试。这样它也可以对其他人有所帮助。【参考方案2】:正如其他答案所建议的那样,UIKeyboardWillChangeFrameNotification
将在每次键盘获得新框架时触发。这包括键盘何时显示和隐藏,以及 QuickType 栏何时显示和隐藏。
问题是,这与UIKeyboardWillShowNotification
完全相同,只是名称不同。 因此,如果您已经为 UIKeyboardWillShowNotification
实现了一个方法,那么您就可以开始了。
但有一个例外。当您在处理UIKeyboardWillShowNotification
的方法中获取键盘框架时,您必须确保通过UIKeyboardFrameEndUserInfoKey
而不是UIKeyboardFrameBeginUserInfoKey
访问它.否则,它会在键盘显示/隐藏时得到正确的框架,但在 QuickType 栏显示时不会。
因此,处理UIKeyboardWillShowNotification
的方法中的代码应如下所示(在 Swift 中):
func keyboardWillShow(notification: NSNotification)
let info = notification.userInfo!
keyboardRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
keyboardRect = yourView.convertRect(keyboardRect, fromView: nil)
// Handling the keyboard rect by changing frames, content offsets, constraints, or whatever
【讨论】:
【参考方案3】:- (void)keyboardFrameChanged:(NSNotification*)aNotification
NSDictionary* info = [aNotification userInfo];
CGPoint from = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].origin;
CGPoint to = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].origin;
float height = 0.0f;
if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation))
height = to.x - from.x;
else
height = to.y - from.y;
[self setContentSize:CGSizeMake(self.frame.size.width, self.frame.size.height + height)];
【讨论】:
以上是关于键盘上的 QuickType 栏的主要内容,如果未能解决你的问题,请参考以下文章
iOS 在 UIWebBrowserView 上以编程方式禁用 Quicktype 键盘
是否可以删除 iOS Quicktype 键盘但保持自动更正?