complete:
ある時点で、テキストフィールドのフィールドエディタで呼び出される必要があります。これが完了メニューのトリガーになりますが、自動的に呼び出されることはありません。F5が何にもバインドされていない場合は、フィールドに入力して、それを押してみてください。その後、完了がトリガーされます。Option-Escも機能する可能性があります。
オートコンプリートが必要な場合は、多少の作業が必要です。次のようなものから始めることができます。
- (void)controlTextDidChange:(NSNotification *)note {
if( amDoingAutoComplete ){
return;
} else {
amDoingAutoComplete = YES;
[[[note userInfo] objectForKey:@"NSFieldEditor"] complete:nil];
}
}
NSControlTextDidChangeNotification
トリガー完了が再度通知されるため、何らかのフラグが必要です。これにより、これが呼び出され、完了がトリガーされ、制御テキストが変更されます。
明らかに、ある時点でフラグの設定を解除する必要があります。これは、ユーザーのオートコンプリートとのやり取りをどのように処理するかによって異なります。特定の開始文字列に対して1つの補完しかない可能性が高いか、ユーザーが入力を続けて可能性を絞り込む必要があります(この場合、オートコンプリートを再度トリガーするには)?
単純なフラグでも、それがうまくいかない場合があります。通知は再投稿されますが、フィールドエディタstring
は変更されていないようです。キーボードからの直接入力に応じてのみ変更されます。オートコンプリートの実装では、「最後に入力した文字列」のコピーを保持し、それを毎回フィールドエディタの内容と比較する必要があることがわかりました。