6

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

我得到了一个相当大的列表,其中包含大约 80,000 个单词和它们各自的“优先级” ——一个根据数字大小确定它们在自动完成中出现的高度的数字,如下所示:

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

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

我已经看到在 iOS 的示例中使用了自动完成功能,但它只提供了非常少量的建议 - 我以前没有见过使用这么大的文件完成它,显然我希望尽可能快地添加用户经验。

任何有关示例、教程或代码建议的建议将不胜感激,谢谢。

4

4 回答 4

7

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

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

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

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

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

于 2013-05-08T20:03:34.450 回答
6

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

于 2013-02-19T15:06:50.743 回答
2

https://github.com/TarasRoshko/TRAutocompleteView

只要符合TRAutocompleteItemsSource协议,就是这样。协议的设计考虑了异步支持。演示应用程序和示例TRGoogleMapsAutocompleteItemsSource应该对您有很大帮助。

于 2013-02-27T20:50:18.293 回答
0

这个链接对我很有效。根据您的代码,不要错过 和 之间的UITextField区别UITextView

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

于 2015-01-30T17:13:07.310 回答