在iPhone UITextField中实现地址簿中的联系人自动完成功能

时间:2010-03-08 08:26:45

标签: iphone autocomplete addressbook

我想在我输入的地方有一个UITextField或UITextView,替代方法会出现类似于在Mail Application中键入地址的内容,替代方案会显示下来并且可以点击它们以便获得更好的输入用户界面。(因为不需要输入完整的单词或地址或电话号码)

我知道如何从Address Book框架中获取数据,以及如何在UITextField / UITextView及其委托中输入文本,但我不知道用什么类型的结构用于获取和显示数据,因为用户执行了他/她的意见。

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

我希望能得到一些帮助。

更新(2010/3/10): 我没有问题制作类似原生的GUI,但我问的是算法,是否有人知道什么样的算法最适合这个东西?也许是一些二叉树? 或者我应该每次只从coredata获取数据?

由于

伊格纳西奥

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

2 个答案:

答案 0 :(得分:7)

你不需要一些高级算法来做这种事情......如果你想搜索地址簿,那么每次用户输入一个字符时你都可以这样做(或者你需要经常搜索一下)。为此,请查看UISearchDisplayController类。我通过查看Apple的TableSearch示例应用程序了解了如何做到几乎完全正确的事情。

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

答案 1 :(得分:1)

前段时间我正在寻找同样的事情。人们一直在暗示的东西是Three20项目(google it。)。

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

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

我从一个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];

希望有所帮助!