2011-08-31 17 views
18

私は、ある時点でキーボード入力が必要なアプリを開発中です。私のアプリはOpenGL ESを使って表示し、テキストフィールドを表示できる独自のグラフィックスフレームワークを持ち、カーソルの管理方法とテキストのレンダリング方法を知っています。このコードは、WindowsやOS Xのような物理的なキーボードを持つ他のプラットフォームでうまく機能します。iPhone/iPadキーボードをフルスクリーンで表示する方法OpenGL ESアプリ

私のアプリのiOS版を機能させるには、キーボードをプログラマチックに上下に持っていく必要があります。ユーザからのキープレスイベントを自分のビューに取得し、それを自分のフレームワークのイベントシステムにルーティングできるようにします。

私はthis questionを見ましたが、そこに描かれている解決策を実現で​​きませんでした。間違ったことをしているか、現在のiOSリリースでうまく動作しないためかどうかはわかりません。

EDIT: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

である基本的な考え方は、あなたがそのようなUIViewとして、UIResponderオブジェクト上UIKeyInputプロトコルを実装することです。ビューをfirstResponderにすると、キーボードが自動的に表示されます。 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

ありがとう、私はこれを試してみましょう。私のアプリでは1つのビューを持っているので、私はそれがすでに最初のレスポンダーであると仮定しました。私はビューの子であったテキストフィールドのbecomeFirstResponderを呼び出していました。このために2番目のビューを作成するとメリットはありますか? – Miguel

+3

ありがとうございました。あなたのアドバイスに従ってキーボードをポップアップさせることができました。あなたが見逃した1つの細部は明らかではないかもしれません(少なくとも私にとってはそうではありませんでした)。UIViewはデフォルトでは最初のレスポンダにならないということです。canBecomeFirstResponderを実装し、それを有効にするにはYESを返します。 – Miguel

+0

2番目のビューを使用してキーボードを処理することに大きな利点があるかどうかはわかりませんが、同じビュー(タッチイベント、多分)で他のイベントを処理しようとしていて、レスポンダーチェーンを制御します。 –

関連する問題