MSWindowは基本的に1つのフィールドエディター(NSTextView)を管理します。しかし、アプリケーションによっては、このフィールドエディターそのものの機能を変更したいと思うかもしれません。そういった特殊なケースに対応できるように、NSWindowの持つフィールドエディター管理機能は、デリゲートによって拡張できるようになっています。
- (id)windowWillReturnFieldEditor:(NSWindow*)window toObject:(id)anObject
{
if(anObject == myTextField)
{
return customFieldEditor;
}
return nil;
}
フィールドエディターを取得しようとしているオブジェクトが、NSWindowのfieldEditor:forObject:メソッドを呼ぶと、NSWindowのデリゲートであるwindowWillReturnFieldEditor:toObject:メソッドが呼ばれるようになっています。
fieldEditor:forObject:の第二引数のオブジェクトが、そのままwindowWillReturnFieldEditor:toObject:の第二引数として渡されてくるので、どのオブジェクトがフィールドエディターを要求しているのか知る事ができます。
そして、windowWillReturnFieldEditor:toObject:の戻り値がフィールドエディターとして、fieldEditor:forObject:の戻り値になります。ただし、nilを返した場合は、NSWindowのデフォルトのフィールドエディターが返されます。