簡體   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