如何从地址簿中select一个联系人ios8

我一直在iOS应用程序上工作一年,现在我升级到ios8,并看到有一种新的方式来select联系人。

我现在所做的是:

-(void)showABNewPersonViewController{ //Calling the addresbook ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; } - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{ //Getting contact email and phone number then assign it to there tb's. ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty); CFStringRef emailID = ABMultiValueCopyValueAtIndex(emails, 0); _tbContactPersonEmail.text = [NSString stringWithFormat:@"%@", emailID]; CFRelease(emailID); CFRelease(emails); ABMultiValueRef phone = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonPhoneProperty); CFStringRef phoneID = ABMultiValueCopyValueAtIndex(phone, 0); _tbContactPersonPhone.text = [NSString stringWithFormat:@"%@", phoneID]; CFRelease(phoneID); CFRelease(phone); [self fieldValueChanged:nil]; [self dismissViewControllerAnimated:YES completion:nil]; return NO; } -(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{ return NO; } -(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{ [self dismissViewControllerAnimated:YES completion:nil]; } 

通过该代码,我可以打开地址簿并select一个联系人,但是现在不会返回他/她的姓名,并且可以打开所选联系人的一种详细视图。

我的peoplePickerNavigationController没有被调用

感谢您的帮助和快速的回​​答¨

为了能够在iOS 8中select一个联系人,你需要使用这个:

 - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person { ....// do whatever you need here } 

当然,你需要首先符合ABPeoplePickerNavigationControllerDelegate

例:

 -(void)openPeoplePicker { ABPeoplePickerNavigationController *personPicker = [ABPeoplePickerNavigationController new]; personPicker.peoplePickerDelegate = self; [self presentViewController:personPicker animated:YES completion:nil]; } - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person { NSString *firstName; NSString *middleName; NSString *lastName; NSDate *retrievedDate; UIImage *retrievedImage; // get the first name firstName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); //get the middle name middleName = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonMiddleNameProperty); // get the last name lastName = (__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); // get the birthday retrievedDate = (__bridge_transfer NSDate*)ABRecordCopyValue(person, kABPersonBirthdayProperty); // get personPicture if (person != nil && ABPersonHasImageData(person)) { retrievedImage = [UIImage imageWithData:(__bridge_transfer NSData*)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail)]; } else { retrievedImage = nil; } //set the name if (firstName != NULL && middleName != NULL && lastName != NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@ %@ %@",firstName,middleName,lastName]; } if (firstName != NULL && middleName != NULL & lastName == NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@ %@",firstName, middleName]; } if (firstName != NULL && middleName == NULL && lastName != NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@ %@",firstName,lastName]; } if (firstName != NULL && middleName == NULL && lastName == NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@",firstName]; } if (firstName == NULL && middleName != NULL && lastName != NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@ %@",middleName, lastName]; } if (firstName == NULL && middleName != NULL && lastName == NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@",middleName]; } if (firstName == NULL && middleName == NULL && lastName != NULL) { retrievedName = [[NSString alloc] initWithFormat:@"%@", lastName]; } [self dismissViewControllerAnimated:NO completion:^(){}]; } 

这是Swift中的一个例子:

调用通讯录select器:

 @IBAction func didTouchAddContactButton(sender: AnyObject) { let contactPicker = ABPeoplePickerNavigationController() contactPicker.peoplePickerDelegate = self // Just to pick an email let properties: [AnyObject] = [Int(kABPersonEmailProperty)] contactPicker.displayedProperties = properties // Open picker presentViewController(contactPicker, animated: true, completion: nil) } 

从个人获取电子邮件:

 extension ViewController: ABPeoplePickerNavigationControllerDelegate { func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) { // Property let list: ABMultiValueRef = ABRecordCopyValue(person, property).takeRetainedValue() //kABPersonEmailProperty // Value index let index = Int(identifier) as CFIndex // Retrieve value let email: String = ABMultiValueCopyValueAtIndex(list, index).takeRetainedValue() as! String // Result print(email) peoplePicker.dismissViewControllerAnimated(true, completion: nil) } } 

我更新我的代码。 这是我更新的代码。 它的工作100%完美。

  - (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person { ABMultiValueRef phone = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonPhoneProperty); CFStringRef phoneID = ABMultiValueCopyValueAtIndex(phone, 0); phoneNumberTextField.text = [NSString stringWithFormat:@"%@", phoneID]; CFRelease(phoneID); CFRelease(phone); [self dismissViewControllerAnimated:YES completion:nil]; } -(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier{ return NO; } -(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{ [self dismissViewControllerAnimated:YES completion:nil]; } - (void)addContactFromPhoneContacts:(id)sender { ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; picker.peoplePickerDelegate = self; [self presentViewController:picker animated:YES completion:nil]; }