繁体   English   中英

iOS 支持外接键盘不显示一个

[英]iOS Support External Keyboard Without Displaying One

鉴于UIViewController ,我只想从外部键盘接收文本输入。 想想UIKeyCommand但对于任何字符(不仅仅是“修改”的字符)。

但是,当我尝试使用UIKeyInput实现它时,如果没有连接外部键盘,iOS 似乎非常想显示一个键盘。

有什么办法可以规避吗? 具体来说,当且仅当连接一个键盘时,才能选择从键盘接收击键?

在摆弄 iPad 一个小时后,我终于迅速找到了一个很好的解决方案。 其他方法较弱或使用第 3 方软件。 即使在 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{}方法中以进行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 后看到的最好的方法。 如果有人发现功能中的错误,请告诉我,但我相信它会解决讨厌的快捷方式栏外部键盘问题。 我希望这可以帮助其他所有人都被这一切弄糊涂了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM