【问题标题】:QuickType Bar on the Keyboard键盘上的 QuickType 栏
【发布时间】:2014-09-25 09:26:25
【问题描述】:

大家可能都知道键盘上的新快速输入栏。

在我的应用程序中,我在键盘上放置了一个自定义 TextView 栏。但是由于 QuickType Bar ,我的文本视图被隐藏了。

我想知道,有没有什么属性或方法可以知道QuickType Bar是否打开?

【问题讨论】:

    标签: ios8 uikeyboard quicktypebar


    【解决方案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)];
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-21
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多