keyDown:メソッドで、KeyDownイベント受け取ることにより、英数字の入力ができるようになりましたが、かな漢字変換を伴う日本語のような言語で文字を入力するには、入力サーバーの支援を受ける必要があります。
入力サーバーとは、キーボードでタイプされたキーから最終的な文字列を返すオブジェクトのことです。「ことえり」や「ATOK」などが入力サーバーの例です。例えば、ビューから「ことえり」に「asagakita[スペース][リターン]」と入力すると「朝が来た」と出力されます。
入力サーバーはcommand + [スペース]やその他の手段で切り替えることができます。ビューが個々の入力サーバーを追跡しなくて済むように、入力サーバーとのやり取りは入力マネージャを介して行われます。
入力サーバーの支援を受けるには、ビューにNSTextInputプロトコルを実装する必要があります。NSTextInputプロトコルの実装はランタイムでチェックされ、その結果によって、そのビューが入力サーバーのサポートを受けられるかどうかが決まります。実装されない場合、入力できるのは単純な英数字のみとなります。
タイプされたキーを入力サーバーに送るには、keyDown:メソッド内でinterpretKeyEvents:メソッドを呼びます。
- (void)keyDown:(NSEvent*)theEvent
{
[self interpretKeyEvents:[NSArray arrayWithObject:theEvent]];
}
interpretKeyEvents:メソッドを呼ぶと、NSTextInputで定義されている各メソッドがコールバックされるので、これらのメソッドを介して入力サーバーと情報のやり取りをします。