4

NSTextFieldカスタム自動完了を提供したいいくつかのコントロールを備えたカスタムビューがあり、NSTextFieldDelegateプロトコルを使用してそれらすべてを正常に実装しました。自動補完は、編集されているテキストフィールドに応じて、フルネームまたは地名になります。

問題は、オートコンプリートにはほとんどの場合スペース文字が含まれているため、ユーザーが提案に一致するものを入力しているが、その提案を受け入れたくない場合、ユーザーがスペースキーを押すと、フィールドエディターが提案を受け入れます。 。フィールドエディタにタブキーのみを使用して提案を受け入れてもらいたい。

NSTextViewこれにはカスタムフィールドエディタを提供するためのサブクラス化が含まれることを理解しています。これはAppleによって許容可能な方法として文書化されていますが、オーバーライドする必要のあるメソッドとオーバーライドされたメソッドが実行する必要があることは明確ではありません。私が欲しいものを手に入れてください。

誰かがこれがどのように達成されるかを提案できますか?

4

1 に答える 1

6

私は、Google-fuを介して受け入れ可能な答えを見つける前に、かなり前からこの質問に悩まされていたことを認めます。元の回答者から露骨に盗まれた魔法のコード:

@interface MLFieldEditor : NSTextView @end

@implementation MLFieldEditor


-  (void)insertCompletion:(NSString *)word forPartialWordRange:(NSRange)charRange movement:(NSInteger)movement isFinal:(BOOL)flag {
    // suppress completion if user types a space
    if (movement == NSRightTextMovement) return;

    // show full replacements
    if (charRange.location != 0) {
        charRange.length += charRange.location;
        charRange.location = 0;
    }

    [super insertCompletion:word forPartialWordRange:charRange movement:movement isFinal:flag];

    if (movement == NSReturnTextMovement)
    {
        [[NSNotificationCenter defaultCenter] postNotificationName:MLSearchFieldAutocompleted object:self userInfo:nil];
    } }

@end

追加参照

于 2012-03-29T09:14:24.403 に答える