gpt4 book ai didi

cocoa - 微调 NSTextField 自动完成

转载 作者:行者123 更新时间:2023-12-03 16:11:48 26 4
gpt4 key购买 nike

我正在使用 NSControlTextEditingDelegate 自动完成内容在 NSSearchField 中输入我生成的自定义建议。complete: 消息发送到字段编辑器当文本更改时。

现在我想微调自动完成的行为并拥有它其工作方式与 Safari 中的 Google 搜索文本字段完全相同:

  1. 当在 NSTextField 中输入两个或多个单词(以空格分隔)时,NSRange 的位置传入 control:textView:textView:completions:forPartialWordRange:
    indexOfSelectedItem:
    在最后输入一个空格之后开始。

    这意味着,如果用户输入“San Fran”并且 Google API 返回“SanFrancisco”,从自动完成列表中选择它 NSTextField 值是替换为“旧金山”。

    一个可能的解决方法是重建包含完成的 NSArray并仅返回实际建议的后缀,取决于 charRange.location。这看起来很糟糕(因为自动完成列表现在仅显示完成字符串的一部分),所以我想要NSTextField 请求自动完成时忽略空格。

  2. 从列表中选择自动完成,默认 NSSearchField 操作不是发送。此时用户需要选择自动完成,然后按输入以触发搜索。

最佳答案

您可以使用自定义字段编辑器来完成此操作,而不是完全依赖委托(delegate)回调。

1) 覆盖 rangeForUserCompletion 并调整返回值,使其包含空格后面的文本。

2) 覆盖 insertCompletion:forPartialWordRange:movement:isFinal 并且如果 isFinal 被选中,则进行接受处理。

上面的步骤 (1) 将确定范围。如果您还在 completionsForPartialWordRange 中设置索引来填充编辑内容(或将其保留为默认 0),请使用空格键以及“/”和“.”。将接受当前选定的行,即使用户想要的是继续输入。要解决此问题,请在 insertCompletion:forPartialWordRange:movement:isFinal 中,如果 isFinal 为 true,请检查 [NSApp currentEvent] 中的这些字符,如果找到,则跳过不处理它或调用 super 就输出。

关于cocoa - 微调 NSTextField 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212920/

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