gpt4 book ai didi

cocoa - NSTextfield 完成

转载 作者:行者123 更新时间:2023-12-03 16:54:53 27 4
gpt4 key购买 nike

有一个解决方案可以使用以下方法完成 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com