iOS支持外部键盘而不显示一个

时间:2016-04-25 17:05:06

标签: ios swift keyboard external

鉴于UIViewController,我希望仅从外部键盘接收文本输入。想想UIKeyCommand但是对于任何角色(不只是'修改过的')。

然而,当我尝试使用UIKeyInput实现它时,似乎iOS如果没有连接外部设备,则迫切想要显示键盘。

有没有办法规避这个?具体来说,是否有选项可以从键盘接收击键,当且仅当连接了一个?

1 个答案:

答案 0 :(得分:1)

在摆弄iPad一小时之后,我终于有了一个很好的解决方案。其他方法很弱或使用第三方软件。即使外部键盘用于iPad,UIKeyboardWillShowNotification被解雇的原因是现有的快捷方式栏。要禁用快捷方式栏,请执行以下操作:

    let item : UITextInputAssistantItem = textField.inputAssistantItem
    item.leadingBarButtonGroups = []
    item.trailingBarButtonGroups = []

这涵盖了您需要的大多数情况,但如果有人在某些使用点插入键盘,UIKeyboardWillShowNotification仍可能被触发。如果你有屏幕调整,你无法承担任何用户体验这种情况的情况。另外,出于某种原因,您可能需要快捷工具栏。无论您的需求是什么,这都涵盖了所有使用外部键盘的情况:

添加到viewDidAppear

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillShow), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillHide), name: UIKeyboardWillHideNotification, object: nil)

每当您离开视图时,都会将此添加到任何让您离开的内容

NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil)

还要将其添加到deinit{}方法中。

现在使用这些功能:

func keyboardWillShow(notification: NSNotification) {
    //   This code is an alternate way of checking for keyboard
    var userInfo: [NSObject: AnyObject] = notification.userInfo!
    let firstFrame = userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue
    let secondFrame = userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue
    let firstRect = firstFrame.CGRectValue()
    let secondRect = secondFrame.CGRectValue()
    let diff = abs(firstRect.origin.y - secondRect.origin.y)
    let isFirstBigger = firstRect.origin.y > secondRect.origin.y
    if firstRect != secondRect && diff != 55 {
        if !isFirstBigger {
            //animateViewToDefaultPosition()
        } else {
            //animateViewToPositionWhenKeyboardActive()
        }
    }
}

func keyboardWillHide() {
    //animateViewToDefaultPosition()
}

55是快捷工具栏的高度。如果您没有,则可以删除它的功能。 !isFirstBigger用于检查何时解开键盘并在文本字段编辑期间将其挂钩。在检查期间diff != 55也很重要,因为当您不想为屏幕设置动画时,可以使用快捷工具栏。

这是迄今为止我在淘宝Stack Overflow后看到的最佳方法。如果有人发现功能中的错误,请告诉我,但我相信它会处理讨厌的快捷键外部键盘问题。我希望这可以帮助其他所有人感到困惑!