給定一個UIViewController
,我只想從外部鍵盤接收文本輸入。認爲UIKeyCommand
但任何字符(不只是'修改')。iOS支持外部鍵盤不顯示一個
但是,當我嘗試使用UIKeyInput
實現時,似乎iOS拼命想要顯示一個鍵盤,如果沒有外部連接。
有什麼辦法可以規避嗎?特別是,如果並且只有在連接了一個選項的情況下,纔有選項可以從鍵盤接收鍵盤輸入?
給定一個UIViewController
,我只想從外部鍵盤接收文本輸入。認爲UIKeyCommand
但任何字符(不只是'修改')。iOS支持外部鍵盤不顯示一個
但是,當我嘗試使用UIKeyInput
實現時,似乎iOS拼命想要顯示一個鍵盤,如果沒有外部連接。
有什麼辦法可以規避嗎?特別是,如果並且只有在連接了一個選項的情況下,纔有選項可以從鍵盤接收鍵盤輸入?
經過一小時擺弄iPad後,終於有了一個很好的解決方案。其他方法很弱或使用第三方軟件。爲什麼UIKeyboardWillShowNotification
即使在iPad上使用外部鍵盤時也會被解僱,這是現有的快捷方式欄。爲了禁用快捷欄,這樣做:
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
也很重要,因爲使用快捷欄時,您不想爲屏幕設置動畫效果。
這是迄今爲止我在淘洗堆棧溢出後看到的最好的方法。如果任何人發現功能中存在錯誤,請告訴我,但我相信它會照顧到煩人的快捷欄外部鍵盤問題。我希望這可以幫助其他所有人感到困惑!