tro*_*foe 4 cocoa autocomplete subclass fieldeditor nstextview
我有一个带有几个NSTextField控件的自定义视图,我想为其提供自定义自动完成功能,并且我已成功实现了使用NSTextFieldDelegate协议的所有控件.自动完成是全名或地名,具体取决于正在编辑的文本字段.
问题是自动完成几乎总是包含空格字符,因此如果用户键入的内容与建议相符,但又不想接受该建议,则当用户按下空格键时,字段编辑器将接受该建议. .我希望字段编辑器仅使用Tab键接受建议.
我理解这将涉及子类化NSTextView以提供自定义字段编辑器,Apple将其记录为可接受的方式,但是我不清楚我需要覆盖哪些方法以及重写的方法需要做什么,以便得到我想要的东西.
谁能建议如何实现这一目标?
我承认,在我通过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
Run Code Online (Sandbox Code Playgroud)
(附加参考)