2011-08-31 52 views
18

我正在研究一個應用程序,該應用程序在某些時候需要鍵盤輸入。我的應用程序使用OpenGL ES進行顯示,並且我有我自己的圖形框架,可以顯示文本字段,並知道如何管理光標和呈現文本。此代碼在其他具有物理鍵盤(如Windows和OS X)的平臺上運行良好。如何在全屏幕上顯示iPhone/iPad鍵盤OpenGL ES應用程序

我需要獲取應用程序的iOS版本的工作方式是以編程方式將鍵盤向上或向下移動從用戶那裏獲得按鍵事件到我的視圖中,以便我可以將它們發送到我的框架自己的事件系統中。

我看到了this question,但我無法讓那裏的解決方案在那裏工作。不知道是因爲我做錯了什麼,或者因爲它不適用於當前的iOS版本。

編輯:指出一個有源代碼的工作應用程序,它將以編程方式創建任何UI元素並將其顯示在GL ES屏幕頂部,如果我理解了這一部分,我想我可以把其餘部分弄清楚。

+0

你不能讓它工作在什麼意義上?鍵盤沒有出現,你不能重定向文本輸入(順便說一下,最好用代理完成)或其他東西?你能顯示你的UITextField相關的代碼嗎? – Tommy

+0

問題是鍵盤沒有出現,是正確的。如果我讓UITextField可見而不是隱藏,我也不會在我的GL屏幕上看到它。 – Miguel

+0

您使用什麼圖形框架來顯示文本字段? –

回答

22

我不能在工作示例點你,但我相信你正在尋找的是這裏http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIKeyInput_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIKeyInput

的基本想法是,你實現一個UIResponder對象的UIKeyInput協議,如UIView 。使視圖成爲第一個響應者,並且鍵盤應該自動出現。 UIKeyInput協議爲您提供了簡單的反饋,用於在用戶按下鍵盤上的按鈕時插入字符和刪除字符。

這是不工作的代碼,但它會是這個樣子:

@interface MyKeyboardView : UIView <UIKeyInput> 
@end 

@implementation MyKeyboardView 
- (void)insertText:(NSString *)text { 
    // Do something with the typed character 
} 
- (void)deleteBackward { 
    // Handle the delete key 
} 
- (BOOL)hasText { 
    // Return whether there's any text present 
    return YES; 
} 
- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 
@end 

視圖時attched,使其成爲第一個響應,顯示鍵盤

[myView becomeFirstResponder]; 

或辭職第一響應者解僱鍵盤

[myView resignFirstResponder]; 

編輯:確保您的視圖附加到vi或者這可能不會做任何事情。

+0

謝謝,我會試試看。由於我在應用程序中擁有單一視圖,因此我認爲它已經是第一個響應者。我正在考慮在文本字段上成爲FirstFirstResponder,這是該視圖的一個小孩。爲此創建第二個視圖有什麼好處嗎? – Miguel

+3

非常感謝您的幫助。我已設法按照您的建議讓鍵盤彈出。你錯過的一個細節可能並不明顯(至少它不適用於我)是因爲默認情況下UIView不會成爲第一響應者,你必須實現canBecomeFirstResponder並從它返回YES來啓用它。 – Miguel

+0

我不確定使用第二個視圖來處理鍵盤是否有很大好處,但如果您嘗試在同一個視圖中處理其他事件(可能是觸摸事件),那麼使用子視圖可能會更好控制響應者鏈。 –

相關問題