Iphone ABUnknownPersonViewController使用allowAddingToAddressBook = YES问题

时间:2013-02-08 14:40:58

标签: iphone ios abaddressbook abpersonviewcontroller

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

Iphone Recents Item

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

PersonViewController

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

所以我的问题是为什么在做出选择后会自动更新地址簿? 我将ABUnknownpersonviewcontroller推送到UITableviewController导航控制器上。和我在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委托中我在编辑模式下调用personviewcontroller。这模拟了本机行为。这可以回答我自己的问题,谢谢大家。

1 个答案:

答案 0 :(得分:0)

ABUnknownPersonViewController没有公开许多自定义选项,您需要实现自己的版本。但这并不难 - “创建新联系人”按钮只会启动ABNewPersonViewController,而“添加到现有联系人”会启动ABPeoplePickerNavigationController。您的ViewController应该充当这些对象的委托,并控制它们完成后会发生什么。