2013-01-09 79 views
3

我需要知道是否連接了外部鍵盤。我熟悉使用NSNotificationCenter並獲取UIKeyboardDidShowNotification事件來確定是否顯示虛擬鍵盤。我遇到的問題是當外接鍵盤被連接並且您點擊文本字段時,小視圖會在'prev'和'next'按鈕的底部顯示。即使連接了外部鍵盤,UIKeyboardDidShowNotification事件也會觸發。因此,即使連接了外接鍵盤,也會顯示虛擬鍵盤。即使外部鍵盤存在,UIKeyboardDidShowNotification事件也會觸發

有沒有辦法禁止顯示'prev'和'next'按鈕的這個小視圖,希望UIKeyboardDidShowNotification事件沒有被觸發。

否則似乎不可能以可靠的方式使用NSNotificationCenter來確定鍵盤是否連接。我當然不希望使用私有API檢測鍵盤是否連接。

+0

外部鍵盤連接時虛擬鍵盤是否顯示?我對上一個和下一個小節的顯示方式感到困惑。這在iOS中是不可能的,除非它是自定義的......或者您是否在UIWebView中單擊在線輸入字段? –

+0

是的,我在一個UIWebView單擊輸入字段。我沒有任何定製。我見過一個鍵盤,雖然我的鍵盤沒有Tab鍵。上一個和下一個按鈕可以實現製表符和背部製表鍵。 – Fred

+0

以下答案:)! –

回答

0

你不應該尋找繞過正常設備行爲,以便做硬件檢測。忘記試圖讓事件不會發生。相反,當使用外部屏幕鍵盤和屏幕鍵盤觸發時,請看看有什麼不同。

從調試,我已經注意到,無論外部鍵盤是否連接,視圖的大小都不一樣。相反,視圖的原點會發生變化,因此只有鍵盤的頂部工具欄纔會繪製在屏幕的邊界內。

- (void)keyboardDidShow:(NSNotification *)notification { 

    NSDictionary *userInfo = [notification userInfo]; 
    CGRect kbRect = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

    if(kbRect.origin.x != 0 || kbRect.origin.y != 0) { 
     //external keyboard 
    } 
    else { 
     //onscreen keyboard 
    } 
} 

以上應該工作,但你總是可以調試應用程序,爲了更好地滿足您的需求改變了「如果」語句。例如,由於我只允許橫向佈局,因此我只需檢查kbRect.origin.x,但不是檢查它是否爲非零,而是使用調試中得到的數字。

我想這已經晚了一年,但我在研究過程中遇到了這個問題,並認爲它仍然值得一個很好的答案。

相關問題