4

我有一个带有几个NSTextField控件的自定义视图,我想为其提供自定义自动完成功能,并且我已经使用NSTextFieldDelegate协议成功实现了所有这些。自动完成是全名或地名,具体取决于正在编辑的文本字段。

问题是自动完成几乎总是包含一个空格字符,因此如果用户正在输入与建议匹配的内容,但不想接受该建议,则字段编辑器将在用户按下空格键时接受该建议. 我希望字段编辑器仅使用 tab 键接受建议。

我知道这将涉及子类化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 回答