有一个解决方案可以使用以下方法完成 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:
方法,并使用自定义 TextView 作为字段编辑器。因此,在编辑文本字段的值期间,任何完成都会调用 -(NSRange)rangeForUserCompletion
在您的 TextView 上。
然后你可以微调你的-rangeForUserCompletion
使其返回您想要完成的精确范围。
此外,fieldEditorForView:
中的代码假设您的应用仅使用一个窗口,如果您使用多个窗口(例如基于文档的应用),则必须对其进行更改并保留每个窗口一个字段编辑器实例强>.
希望有帮助:)
关于cocoa - NSTextfield 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12353880/