ABPeoplePickerNavigationController是否随iOS8更改?

ABPeoplePickerNavigationController是否随iOS8更改?,ios,ios8,abpeoplepickerview,Ios,Ios8,Abpeoplepickerview,由于我已将iPhone上的XCode(6.0,6A313)和iOS(8.0,12A365)更新为gm seeds,ABPeoplePickerNavigationController代码的工作方式与以前不同 iOS 7.1.2:如果有人想要导入联系人,则会打开通讯簿,您会看到联系人的完整列表,在选择联系人后,它会打开联系人的详细信息视图,然后您可以通过单击要导入的电话号码来添加联系人 iOS 8.0:一切都很相似,但如果你点击联系人的号码,它就会拨打电话号码,而不是导入 代码: 在苹果的iO

由于我已将iPhone上的XCode(6.0,6A313)和iOS(8.0,12A365)更新为gm seeds,ABPeoplePickerNavigationController代码的工作方式与以前不同

  • iOS 7.1.2:如果有人想要导入联系人,则会打开通讯簿,您会看到联系人的完整列表,在选择联系人后,它会打开联系人的详细信息视图,然后您可以通过单击要导入的电话号码来添加联系人

  • iOS 8.0:一切都很相似,但如果你点击联系人的号码,它就会拨打电话号码,而不是导入

代码:

在苹果的iOS开发者库中找不到任何答案。
是否有其他人为其提供解决方案?

iOS 8要求为此实现新的委托方法:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
}
保留旧的委托方法以支持iOS 7或更早版本。我在应用程序中所做的是从iOS 8委托方法调用iOS 7委托方法:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
    [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier];
}

如果此委托方法未在iOS 8中实现,则点击该值将导致该操作。实现时,将使用所选值调用委托。

另请参见委托方法,iOS8新增:

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person;
{
    [self selectedPerson:person];
}

这正是我想要的。

这对我在iOS 8和iOS 7及更低版本上都有效

注意我使用的是这个didSelectPerson:(ABRecordRef)person

//Needed for iOS 8
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
{
    NSLog(@"Went here 1 ...");

    [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person];
}


//needed for iOS 7 and lower
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{

    NSLog(@"Went here 2 ...");

    //add your logic here

}

这在iOS 8.0.1上对我不起作用。我还需要实现其他委托方法吗?我的委托根本没有被击中,除了cancel方法。@AlexanderCollins它在8.0.1中对我来说很好。您确定已设置您的委托吗?是的,我的取消委托方法被正确命中。选择联系人的电话号码只会呼叫该联系人,而不是点击我的didSelect:delegate方法。@AlexanderCollins您应该发布您自己的问题,并提供所需的详细信息。效果非常好。谢谢:)很好用,谢谢Chris Prince。这是iOS 8的完整答案。需要有人编辑已接受的答案
//Needed for iOS 8
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person
{
    NSLog(@"Went here 1 ...");

    [self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person];
}


//needed for iOS 7 and lower
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{

    NSLog(@"Went here 2 ...");

    //add your logic here

}