2016-04-25 9 views
2

UIViewControllerを入力した場合、外部キーボードからのテキスト入力のみを受け取りたいとします。 UIKeyCommandと思っていますが、変更された文字だけではありません。iOSのサポート外付けキーボードの表示なし

しかし、UIKeyInputを使用して実装しようとすると、iOSは外付けキーボードが接続されていなければキーボードを表示したいように見えます。

これを回避する方法はありますか?具体的には、キーボードからキーストロークを受信するオプションを使用するには、そのキーストロークが接続されている場合に限ります。

答えて

1

iPadを1時間操作した後、私はついにこれを迅速に解決する良い解決策を得ました。他の方法は弱く、サードパーティのソフトウェアを使用しています。 iPad用に外付けキーボードを使用していてもUIKeyboardWillShowNotificationが発射されている理由は、ショートカットバーが存在するためです。これはあなたが必要なもののほとんどのケースをカバーしてい

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

、誰かが使用する特定の時点でで自分のキーボードを差し込む場合UIKeyboardWillShowNotificationはまだ解雇することができます:ショートカットバーを無効にするためには、これを行います。画面が調整されている場合は、ユーザーがこれを体験する余裕はありません。さらに、何らかの理由でショートカットバーが必要な場合もあります。関係なく、あなたの欲望が何であるかの、これが使用されている外付けキーボードのすべてのケースを取り上げます。

ビューを去る時はいつでもあなたは

NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil) 
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil) 
を残して作るものにこれを追加し 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) 

に追加

も、それを加算する方法に追加します。

さて、これらの関数を使用します。

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を精練した後に見た最良の方法です。もし誰かが機能にバグを見つけたら、私に知らせてください。しかし、私はそれが厄介なショートカットバーの外付けキーボードの問題を処理すると確信しています。私はこれがこのすべてによって混乱しているのを手伝ってくれることを願っています!

関連する問題