有一个解决方案可以使用方法完成NSTextField:
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int*)index
有几个单词而不是一个单词?因为当你输入一个空格时,再次开始完成......
感谢。
答案 0 :(得分:4)
迟到总比没有好,对其他人可能有所帮助:
这是一个有点棘手的问题,因为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:
中的代码假设您的应用使用仅一个窗口,如果您使用多个窗口(例如基于文档的应用),则必须更改它并保持每个窗口一个字段编辑器实例。
希望有所帮助:)