我使用NSControlTextEditingDelegate自动完成了什么
使用我生成的自定义建议在NSSearchField中键入。
complete:
消息被发送到字段编辑器
当文字改变时。
现在我想微调自动完成的行为并拥有它 完全像Google搜索文本字段一样在Safari中工作:
在NSTextField中键入两个或多个单词(用空格分隔)时,
在control:textView:textView:completions:forPartialWordRange:
indexOfSelectedItem:
传入的NSRange的位置在最后一个空格键入后开始。
这意味着如果用户输入" San Fran"和谷歌API返回"圣 Francisco",从自动完成列表NSTextField值中选择它 取而代之的是#San; San San Francisco"。
可能的解决方法包括重建包含完成的NSArray
并仅返回实际建议的后缀,
取决于charRange.location。这看起来很糟糕(因为自动完成
list现在只显示完成字符串的一部分),所以我想拥有
请求自动完成时NSTextField
忽略空格。
从列表中选择自动完成,默认NSSearchField操作不是 发送。此时用户需要选择自动完成然后按 输入以触发搜索。
答案 0 :(得分:1)
您可以使用自定义字段编辑器来执行此操作,而不是完全依赖委托回调。
1)覆盖rangeForUserCompletion
并调整返回值,使其包含空格之后的文本。
2)覆盖insertCompletion:forPartialWordRange:movement:isFinal
,如果选中了isFinal,则进行接受处理。
上面的步骤(1)将确定范围。如果还要在completionsForPartialWordRange
中设置索引以填充编辑内容(或将其保留为默认值0),请使用空格键以及“ /”和“”。即使用户想要继续输入,也将接受当前选择的行。要解决此问题,请在insertCompletion:forPartialWordRange:movement:isFinal
中,如果isFinal为true,请检查[NSApp currentEvent]
中的那些字符,如果找到了这些字符,请跳过而不进行处理或调用super。