2

ABPeoplePickerNavigationController用来显示地址簿用户,然后我返回“是” shouldContinueAfterSelectingPerson以查看用户的电话和电子邮件。
但是当我点击电话或电子邮件时,什么也没有发生……我希望它发送短信或电子邮件。
这是我需要自己实现的吗?

我也返回 YES shouldContinueAfterSelectingPerson,它不应该做的工作吗?

4

2 回答 2

5

很抱歉,你有很多工作要做。首先,一旦用户选择了联系人,那么您需要自己提取电话或电子邮件。如果有多个电话号码或电子邮件地址,您可能应该提示用户使用哪一个 - 通过使用 UIActionSheet 或表格。使用电话号码,您可以创建电话 URL 并将其发送到共享应用程序,这会导致拨打电话(这里有很多关于如何执行此操作的示例)。

使用电子邮件地址,您需要使用 MFMailComposeViewController 创建一封电子邮件,然后通过委托为用户添加一个已知地址。还有一个姊妹类,MFMessageComposeViewController,用于发送 SMS 消息。

我为我的公司做了同样的事情,我花了大约 3 天的时间来编码和测试整个事情(所有 3 个选项)。

编辑:一个人可以有多个电话号码和电子邮件地址。您在这里有两个选择:

  • 使用您已经在使用的委托方法,返回 NO,但保存用户点击的“属性”和“标识符”。这将是一个电话号码、电子邮件地址等(它也可能是一个地址,因此您需要更深入地探索。您可以在此处或其他地方找到如何使用这两个值获取确切属性的示例。

  • 您可以使用“peoplePickerNavigationController:shouldContinueAfterSelectingPerson:”不向用户显示人员的属性,而只是表明这是他们有兴趣联系的人。通过该人的记录,您可以了解他们有多少个电子邮件地址,如果只有一个,那么您的工作就完成了。如果不是,你必须让那个人告诉你是哪一个。[这就是我的做法]

于 2012-09-02T17:38:51.023 回答
1

我同意大卫 H 在他的回答中所说的,你有很多工作要做。为了帮助你一点,将向你解释如何发送短信。

这里还有一个小代码片段,可以让您了解如何从通讯簿记录中获取电话号码:

ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef record = ABPersonCreate();
ABMutableMultiValueRef multi;
record = ABAddressBookGetPersonWithRecordID(addressBook, contactID);
multi = ABRecordCopyValue(record, kABPersonPhoneProperty);
int multiCount = ABMultiValueGetCount(multi);
for(CFIndex i=0; i<multiCount; i++)
{
    [tempArrayPhones addObject:[NSString stringWithFormat:@"%@", (NSString *)ABMultiValueCopyValueAtIndex(multi, i)]];
}

同样,这不是一个完整的代码,它只是给你一个想法的片段。

于 2012-09-02T20:15:09.100 回答