Iphone ABUnknownPersonViewController 使用 allowsAddingToAddressBook = YES 问题

标签 iphone ios abaddressbook abpersonviewcontroller

让我先解释一下我想做什么。在 native Iphone 的“最近”选项卡中,如果您单击在任何地址簿中都找不到的联系人,您可以选择“添加到现有联系人”

Iphone Recents Item

点击“添加到现有联系人”后,会出现一个选择器,您可以进行选择。之后它会自动将您带到 ABPersonViewController 并允许您编辑或保存新联系人:

PersonViewController

我正在尝试重新创建它,但遇到了一些问题。在我的版本中,在我创建 UnknownPersonViewController 并且最终用户按下“添加到现有联系人”后,会出现一个选择器,并允许从类似于 native Iphone 的地址簿中进行选择。但是在做出选择后,名称会自动添加到地址簿中,并且没有 personViewController 出现让用户选择是否添加联系人。即使我可以让它在做出选择后不自动写入地址簿,我也可以让它立即在编辑模式下显示一个 personviewcontroller。

所以我的问题是为什么在做出选择后会自动更新地址簿? 我将 ABUnknownpersonviewcontroller 推到 UITableviewController 导航 Controller 上。并在装有 iOS 6.01 的物理设备上进行测试 这是一些代码:

 ABRecordRef person = ABPersonCreate ();
 ABMutableMultiValueRef multiValue = ABMultiValueCreateMutable(kABStringPropertyType);
    ABMultiValueAddValueAndLabel(multiValue, call.number,      kABPersonPhoneMainLabel, 
                                 NULL);
    ABRecordSetValue(person, kABPersonPhoneProperty, multiValue, error);
    if(multiValue) CFRelease(multiValue);


 ABUnknownPersonViewController *unknownCtrl = [[ABUnknownPersonViewController alloc] init];
unknownCtrl.displayedPerson = person; //this has a phone number with "main" label
unknownCtrl.allowsActions = YES;
unknownCtrl.allowsAddingToAddressBook = YES;
unknownCtrl.editing=NO;
unknownCtrl.unknownPersonViewDelegate = self;

    // unknownCtrl.addressBook=ABAddressBookCreate(); // I tried setting addressbook to nil and object
unknownCtrl.addressBook=nil;

[self setTitle:call.type forUIViewController:unknownCtrl];

[self.navigationController pushViewController:unknownCtrl animated:YES];

注意:我有一个与这篇文章类似的问题:http://forums.macrumors.com/archive/index.php/t-1023140.html

也许https://discussions.apple.com/thread/1682620?start=0&tstart=0

更新: 似乎如果我从这个人那里输入 kABPersonPhoneMainLabel,那么它不会将电话号码写入联系人。之后我所做的是在 didResolveToPerson 委托(delegate)中,我在编辑模式下调用了 personviewcontroller。这模拟了 native 行为。这可能会回答我自己的问题,谢谢大家。

最佳答案

ABUnknownPersonViewController 没有公开很多自定义选项,您需要实现自己的版本。不过这并不难——“创建新联系人”按钮只会启动一个 ABNewPersonViewController,而“添加到现有联系人”按钮会启动一个 ABPeoplePickerNavigationController。您的 ViewController 应该充当这些对象的委托(delegate),并控制它们完成时发生的事情。

关于Iphone ABUnknownPersonViewController 使用 allowsAddingToAddressBook = YES 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774967/

相关文章:

ios - 使用 swift 在 iOS 中访问联系人详细信息

cocoa - 如何更新: (COCOA/OSX) ABPerson/ABMultiValue (phonenumbers)?

iphone - NSXMLParser 和针对 iOS 上的 DTD 的验证

ios - 在 OS X 上使用 nm(1) 列出为 arm64 构建的目标文件中的符号

objective-c - UILabel透明度

ios - Swift NSNotificationCenter 在其他类中添加观察者功能

ios - ABAddressBook 到 CNContact 应用程序转换

iphone - 从纵向更改为横向时如何调整单元格中的 UITextView 的大小?

iphone - dismissViewControllerAnimated :completion: has a couple second delay

ios - 如何在运行时确定只读属性是否弱?