首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTextfield完全

NSTextfield完全
EN

Stack Overflow用户
提问于 2012-09-10 14:33:41
回答 1查看 1.2K关注 0票数 1

有一个用方法完成NSTextField的解决方案:

代码语言:javascript
复制
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(int*)index 

有几个字却一个字都没有?因为当你输入一个空格时,完成会重新开始.

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-09-07 09:49:05

迟到总比从来没有好,这可能对其他人有帮助:

这是一个有点棘手的问题,因为NSControlTextEditingDelegate / NSTextFieldDelegate没有提供一种直接解决它的方法。您需要做的是创建NSTextView的自定义子类(是的,文本视图),并重写方法- (NSRange)rangeForUserCompletion

代码语言:javascript
复制
- (NSRange)rangeForUserCompletion
{
    return [self selectedRange];
}

然后是子类NSTextFieldCell,以覆盖- (NSTextView *)fieldEditorForView:方法。

代码语言:javascript
复制
- (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:中的代码假定您的应用程序只使用一个窗口,如果您使用多个窗口(例如基于文档的应用程序),您将不得不更改它,并在每个窗口保留一个字段编辑器实例。

希望它有帮助:)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12353880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档