3

我希望有一个 UITextField 或 UITextView 在我做一些输入时,替代品会出现类似于您在邮件应用程序中键入地址时的东西,替代品出现在下方并且可以点击它们以获得更好的输入用户界面。(因为无需输入完整的单词或地址或电话号码)

我确实知道如何从通讯簿框架中获取数据,也知道如何在 UITextField/UITextView 及其委托中输入文本,但我不知道在用户输入时使用哪种结构来获取和显示数据。

如果这很重要,我知道基本的 CoreData,

我希望我能得到一些帮助。

更新(2010 年 3 月 10 日):我制作类似本机的 GUI 没有问题,但我问的是算法,有没有人知道哪种算法最适合这个东西?也许是一些二叉树?还是我应该每次都从 coredata 获取数据?

谢谢

伊格纳西奥

更新(2010/03/28):这些天我一直很忙,所以我没有尝试过 UISearchResults 但对我来说似乎很好。但我想知道是否有必要删除获胜的答案?我认为我的声誉下降并且看不到获胜的答案是不公平的。;(

4

2 回答 2

7

你不需要一些高级算法来做这种事情......如果你想搜索通讯录,那么你可以在每次用户输入一个字符时这样做(或者你需要搜索的频率如何)。为此,只需查看UISearchDisplayController类。通过查看 Apple 的TableSearch示例应用程序,我学会了如何做几乎完全相同的事情。

该应用程序使用不同的字段(所有、设备、桌面、便携式)搜索对象列表......因此您可以将其调整为地址簿字段(名字、姓氏、地址......)。您唯一需要更改的是通讯簿中的搜索。我不确切知道您的要求是什么,但这应该是您完成它所需要的。如果您对代码有任何问题,请告诉我……但是这个示例确实对我有所帮助,因此希望它对您有用。

于 2010-03-10T13:47:10.377 回答
1

不久前我也在寻找同样的东西。人们一直建议的是 Three20 项目(谷歌搜索)。

对于我的需要,这太过分了,因为它需要构建整个项目,而我不想要整个项目。另外,自己尝试会更有趣:)

我最终从头开始制作自己的:

我开始使用 UIScrollView 的子类来包含不同的控件。我将 UITextField 子类化并覆盖了“editingRectForBounds”以支持多行。显示联系人的位只是一个 UITableView,其背景颜色为:

[UIColor colorWithRed:0.92 green:0.92 blue:0.92 alpha:1];

和分隔符颜色:

[UIColor colorWithWhite:0.85 alpha:1];

这和阴影的使用使它看起来像是在 UITextField 下方略微凹陷。我使用自定义 UIView 创建阴影,加载一次并在需要时隐藏它,但它与图像一样好。

最后,我使用自定义 UIView 制作了蓝色药丸形状,它可以拦截“touchesBegan”以了解它们何时应该改变颜色。

添加它们很简单,只需计算它们需要去哪里并使用:

[myTextField addSubview:myBlueView];

希望有帮助!

于 2010-03-08T17:43:11.813 回答