【问题标题】:Implementing Autocomplete in iOS在 iOS 中实现自动完成
【发布时间】:2013-02-19 15:02:45
【问题描述】:

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

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

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

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

我已经看到在 iOS 的示例中使用了自动补全功能,但它只是用于少量建议 - 我以前从未见过使用这么大的文件完成它,显然我希望尽可能快地完成它以增加用户体验。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

      https://github.com/TarasRoshko/TRAutocompleteView

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-01-28
          • 2016-06-23
          • 2018-04-23
          • 2012-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-12
          • 1970-01-01
          相关资源
          最近更新 更多