Clavier externe de support iOS sans en afficher un

Étant donné un UIViewController , je souhaite recevoir du text uniquement à partir du keyboard externe. Pensez à UIKeyCommand mais pour n'importe quel personnage (pas seulement ceux qui sont "modifiés").

Cependant, quand j'essaye d'implémenter cela en utilisant UIKeyInput , il semble UIKeyInput veut désespérément afficher un keyboard s'il n'y a pas de keyboard externe connecté.

Y a-t-il un moyen de contourner cela? Plus précisément, avoir les options pour recevoir des frappes du keyboard si, et seulement si, on est connecté?

Après avoir sortingpoté un iPad pendant une heure, j'ai enfin une bonne solution pour ça en vitesse. Les autres methods sont faibles ou utilisent un logiciel tiers. La raison pour laquelle UIKeyboardWillShowNotification se triggers même lorsqu'un keyboard externe est utilisé pour un iPad est la barre de raccourci existante. Pour désactiver la barre de raccourcis, procédez comme suit:

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

Cela couvre la plupart des cas de ce dont vous avez besoin, mais UIKeyboardWillShowNotification peut toujours être déclenché si quelqu'un twig son keyboard à certains points d'utilisation. Si vous avez l'écran ajuster, vous ne pouvez pas se permettre n'importe quel cas pour que l'user éprouve ceci. De plus, vous pourriez vouloir la barre de raccourci pour une raison quelconque. Quels que soient vos désirs, cela couvre tous les cas d'utilisation d'un keyboard externe:

Ajouter à 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) 

chaque fois que vous quittez la vue, ajoutez ceci à tout ce qui vous fait partir

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

ajoutez-le également à la méthode deinit{} pour être efficace.

Maintenant, utilisez ces fonctions:

 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() } 

Le 55 est la hauteur de la barre de raccourci. Vous pouvez supprimer cette fonctionnalité si vous n'en avez pas. Le !isFirstBigger est utilisé pour vérifier quand ils décrochent le keyboard et le raccrocher pendant l'édition du champ de text. Il est également important que diff != 55 lors de cette vérification, car avec une barre de raccourci, ce serait le cas lorsque vous ne voulez pas animer l'écran.

C'est de loin la meilleure méthode que j'ai vu après avoir récuré Stack Overflow. Si quelqu'un trouve un bug dans la fonctionnalité, faites le moi savoir, mais je suis confiant qu'il prendra soin des questions de keyboard externe de barre de raccourcis embêtant. J'espère que cela aide tout le monde là-bas confus par tout cela!