有一个解决方案可以使用方法完成 NSTextField:
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int*)index
有几个词而不是一个词?因为当你输入一个空格时,补全又开始了……
谢谢。
有一个解决方案可以使用方法完成 NSTextField:
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int*)index
有几个词而不是一个词?因为当你输入一个空格时,补全又开始了……
谢谢。
迟到总比没有好,它可能对其他人有帮助:
这是一个有点棘手的问题,因为NSControlTextEditingDelegate
/NSTextFieldDelegate
没有提供直接解决它的方法。您需要做的是创建NSTextView
(是的,文本视图)的自定义子类,并覆盖该方法- (NSRange)rangeForUserCompletion
:
- (NSRange)rangeForUserCompletion
{
return [self selectedRange];
}
然后子类NSTextFieldCell
覆盖该方法- (NSTextView *)fieldEditorForView:
:
- (NSTextView *)fieldEditorForView:(NSView *)aControlView
{
static MyTextView* _myFieldEditor = nil;
if (_myFieldEditor == nil) {
_myFieldEditor = [[MyTextView alloc] init];
[_myFieldEditor setFieldEditor:YES];
}
return _myFieldEditor;
}
然后在 Interface Builder 中,将文本字段单元格的类设置为NSTextFieldCell
. 当您的文本字段成为第一响应者时会发生什么,窗口将调用您的单元格的-fieldEditorForView:
方法,并使用您的自定义文本视图作为字段编辑器。因此,在编辑文本字段的值期间,任何完成都会调用-(NSRange)rangeForUserCompletion
您的文本视图。
然后你可以微调你的-rangeForUserCompletion
,让它返回你想要完成的确切范围。
此外,中的代码fieldEditorForView:
假设您的应用程序仅使用一个窗口,如果您使用多个窗口(例如基于文档的应用程序),您必须更改它并为每个窗口保留一个字段编辑器实例。
希望能帮助到你 :)