有一个用方法完成NSTextField的解决方案:
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int*)index 有几个字却一个字都没有?因为当你输入一个空格时,完成会重新开始.
谢谢。
发布于 2013-09-07 09:49:05
迟到总比从来没有好,这可能对其他人有帮助:
这是一个有点棘手的问题,因为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中,将文本字段单元格的类设置为NSTextFieldCell的子类。当您的文本字段成为第一个响应程序时,窗口将调用单元格的-fieldEditorForView:方法,并使用您的自定义文本视图作为字段编辑器。因此,在编辑文本字段的值期间,任何完成都将调用文本视图上的-(NSRange)rangeForUserCompletion。
然后,您可以微调您的-rangeForUserCompletion,使其返回您希望完成的确切范围。
另外,fieldEditorForView:中的代码假定您的应用程序只使用一个窗口,如果您使用多个窗口(例如基于文档的应用程序),您将不得不更改它,并在每个窗口保留一个字段编辑器实例。
希望它有帮助:)
https://stackoverflow.com/questions/12353880
复制相似问题