键盘上的 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 字典中的UIKeyboardFrameBeginUserInfoKeyUIKeyboardFrameEndUserInfoKey 值来检索键盘的当前和未来帧。可以参考以下代码。

- (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 键盘但保持自动更正?

在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘

Swift编码总结2

使用 U 盘上的 GIT 获取“旅行代码”

XAMPP php 重定向到 C 盘上的 html