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

给定一个UIViewController ,我想只接收来自外部键盘的文本input。 认为UIKeyCommand但任何字符(不只是“修改”的)。

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

有什么办法可以规避吗? 具体来说,如果且仅当连接一个选项才能从键盘接收按键input选项?

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

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

这涵盖了你所需要的大部分情况,但是如果有人在某些使用位置插入键盘, UIKeyboardWillShowNotification仍然可以被解雇。 如果你有屏幕调整,你无法承受任何情况下,用户体验到这一点。 此外,您可能需要快捷栏出于某种原因。 不pipe你的愿望是什么,这涵盖了所有使用外部键盘的情况:

添加到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{}方法中。

现在使用这些function:

 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是快捷栏的高度。 你可以删除它的function,如果你没有一个。 !isFirstBigger用于检查文本字段编辑期间何时解除键盘locking并将其挂回。 在检查过程中diff != 55也很重要,因为使用快捷栏时,您不希望使屏幕动起来。

这是迄今为止淘洗堆栈溢出后我所见过的最好的方法。 如果任何人发现function的错误,让我知道,但我相信这将处理烦人的快捷栏外部键盘问题。 我希望这可以帮助所有这些困惑的所有人!