微调NSTextField自动完成

约夫

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

现在,我想微调自动补全的行为,使其与Safari中的Google搜索文本字段完全相同:

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

    这意味着,如果用户键入“ San Fran”并且Google API返回“ San Francisco”,则从自动完成列表中选择它,将NSTextField值替换为“ San San Francisco”。

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

  2. 从列表中选择自动完成功能,则不会发送默认的NSSearchField操作。目前,用户需要选择自动完成功能,然后按Enter触发搜索。

佐伊·彼得森(ZoëPeterson)

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

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章