在iOS中实现自动完成功能

时间:2013-02-19 15:02:45

标签: ios objective-c algorithm cocoa-touch autocomplete

我正在创建一个应用程序,当用户输入文本输入时,我需要实现自动完成功能,文本字段下方出现10个最接近/排名最高的单词。

我已经获得了大约80,000个单词的相当大的列表及其各自的“优先级” - 这个数字决定了它们在自动完成中出现的高度,具体取决于数字的大小,像这样:

"transport international";19205
"taxi";18462
"location de voitures";18160
"police";18126
"formation";17858

我对iOS开发有点新意,并且想知道最好的方法是什么 - 我应该将80,000个短语分成更小的文件,还是只保留一个?什么会更快?

我已经看到在iOS的一个例子中使用了自动完成,但它只是提供了很少的建议 - 我之前没有看过使用过这么大的文件,显然我想尽可能快地完成它增加用户体验。

非常感谢有关示例,教程或代码建议的任何建议,谢谢。

4 个答案:

答案 0 :(得分:7)

如果您喜欢自动完成但是UITextField的直接子类,那么MLPAutoCompleteTextField可能会让您感兴趣。

MLPAutoCompleteTextField的工作原理是,每次文本字段中的文本发生更改时,只需向自动完成数据源询问一系列自动完成建议。它甚至可以自动对单词进行排序,以便最接近用户键入的单词将显示在自动完成列表的顶部(使用Levenshtein Distance算法)。自动填充建议可以是简单的字符串,也可以是实现MLPAutoCompletionObject协议的对象。

提示:对于自动填充术语的大型数据集,您可能希望根据起始字母分解列表。 (例如:当用户输入字母F时,您只为自动填充文本字段提供以F开头的单词列表。)

MLPAutoCompleteTextField可以在合理的时间内有效地对数千个建议进行排序,并且在排序时永远不会阻止UI。

目前,加权建议(覆盖默认排序)是不可能的,但它是一个计划的功能。

答案 1 :(得分:6)

你可能想要使用这个repo HTAutocompleteTextField,完美的解决方案。

答案 2 :(得分:2)

https://github.com/TarasRoshko/TRAutocompleteView

只要符合TRAutocompleteItemsSource协议即可。协议的设计考虑了异步支持。演示应用和示例TRGoogleMapsAutocompleteItemsSource应该会对您有很大的帮助。

答案 3 :(得分:0)

link对我来说效果很好。根据您的代码,不要错过UITextFieldUITextView之间的差异。

没有额外的库,只需一个简单的自定义UITableView和搜索功能。