我已经在ios7上使用iOS应用程序,现在我将其升级到ios8,并且看到有一种新的方式来选择联系人。
我现在所做的是:
-(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];
}
使用该代码我可以打开地址簿并选择一个联系人,但现在它没有返回他/她的姓名和编号,而是打开所选联系人的详细视图。
我的peoplePickerNavigationController未被调用
感谢您的帮助和快速回答¨
答案 0 :(得分:12)
要在iOS 8中选择联系人,您需要使用:
- (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:^(){}];
}
答案 1 :(得分:2)
拨打地址簿选择器:
@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)
}
从Person获取电子邮件:
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)
}
}
答案 2 :(得分:0)
我更新了我的代码。这是我更新的代码。它的工作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];
}