2

我正在尝试将自动完成功能实现到一个小应用程序中。我想让用户可以将一个城市(从一长串城市)写到 NSComboBox 中。只要用户在我的城市名称数组中使用城市的确切书写方式,它就可以正常工作。但是,如果他们出于某种原因使用不同的拼写,则会失败并且找不到该城市。

因此,例如,如果用户正在寻找“Köln”,这不是问题,但如果他正在寻找“Cologne”,他将无法找到它。

为此,我为每个城市提供了一组额外的替代拼写。

现在我希望 NSComboBox(或任何其他类型的 TextField)不仅可以在“city.name”中查看,还可以在数组“city.alternativeNames”中查看。显示的值也应该代表用户正在写的内容。

我不想在 NSComboBox 的弹出部分的列表中为每个替代名称创建一个条目,因为这会使列表比实际更长并且会使人们感到困惑(仅古龙水就有 85 种不同的拼写)。

感谢您的建议,我对 NSComboBox 完全陌生。

4

1 回答 1

1

有趣的问题。我认为您可能需要选择一种不同的方式来构建数据以使其更容易。

考虑查找方法(匹配字符串)。为这种情况构建您的数据应该考虑到每个城市的首选拼写(您首选,用于滚动列表)。

一个扁平的城市数组怎么样(允许基于用户拼写的简单搜索,而不必检查每个可能的替代数组并正确管理它们的排序),但每个城市都有一个可选的(可以是 nil)“首选拼写”指针“正确”之一。在组合框中显示选项时,显示由没有可选首选拼写的数组过滤的数组以及当前键入的部分/完全完成的替代拼写?

所以 aCity有一个name属性和一个可选preferred属性。在您的情况下,如果首选 Cologne,则 Köln 实例会将 Cologne 设置为首选。Köln 只有在用户输入(甚至是部分输入)时才会出现在列表中,并且它会自动处于正确的 alpha 排序位置(假设您的城市保持排序)。

这有意义还是我需要改写?今天早上没有喝足够的咖啡。:-)

于 2017-05-28T15:19:12.660 回答