繁体   English   中英

如何在iPhone应用程序中添加联系人?

[英]How to add contact from within an iPhone app?

我想跟踪我的iPhone应用程序中的人-从现有的联系人数据中添加他们,或者提示用户输入一个新的联系人,该联系人将保存到他们的联系人中。

我知道我可以创建一个人的记录并将其添加到通讯录中, 是否可以显示此屏幕
还是我必须实现自己的视图以方便创建联系人条目?

iPhone上“新联系人”屏幕的屏幕截图

苹果提供ABNewPersonViewController 如果您需要一些示例代码,请参阅快速联系人 ,特别是本节:

ABNewPersonViewController *picker = [[ABNewPersonViewController alloc] init];
picker.newPersonViewDelegate = self;

UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:picker];
[self presentModalViewController:navigation animated:YES];

[picker release];
[navigation release];

您是否尝试过使用ABNewPersonViewController?
并查找标题为“提示用户创建新的联系人记录”一节。

以下代码可用于所有IOS版本,#import,#import

-(void)addContact
{

ABPeoplePickerNavigationController *peoplePicker;
ABAddressBookRef addressBook;


peoplePicker=[[ABPeoplePickerNavigationController alloc] init];
addressBook = [peoplePicker addressBook];
if(!IOS_OLDER_THAN_6)
{
    addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined)
    {
        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error)
                                                 {
                                                     if (granted)
                                                     {
                                                         if (![self checkExistsContacts]){
                                                             [self addThisContact];

                                                         }
                                                         else
                                                         {
                                                             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App " message:@"Your contat is already exists." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                                             [alert show];
                                                         }
                                                     }
                                                     else
                                                     {
                                                         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App does not access to your contacts" message:@"To enable access go to : iPhone's Settings Privacy  > Contacts > App > set 'On'" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                                         [alert show];
                                                     }
                                                 });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
    {
        // The user has previously given access, add the contact
        if (![self checkExistsContacts]){
            [self addThisContact];

        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App " message:@"Your contat is already exists." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        }

    }
    else
    {
        // The user has previously denied access
        // Send an alert telling user to change privacy setting in settings app
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App does not access to your contacts" message:@"To enable access go to : iPhone's Settings Privacy  > Contacts > App > set 'On'" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
}
else
{
    if (![self checkExistsContacts]){
        [SVProgressHUD showWithStatus:@"Saving..." maskType:SVProgressHUDMaskTypeClear];

        NSString *strCell=@"1-800-123-1234”;
        NSString *strFirstName=@“fname”;
        NSString *strLastName=@“lname”;
        NSUInteger addressbookId = 0;

        ABRecordRef aRecord = ABPersonCreate();
        CFErrorRef  anError = NULL;
        ABRecordSetValue(aRecord, kABPersonFirstNameProperty, (__bridge CFTypeRef)(strFirstName), &anError);
        ABRecordSetValue(aRecord, kABPersonLastNameProperty, (__bridge CFTypeRef)(strLastName), &anError);


        //(@"adding phonee");
        ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType);


        if(strCell) ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)(strCell), kABPersonPhoneIPhoneLabel,NULL);

        CFRelease(multi);
        ABAddressBookRef addressBook1;
        CFErrorRef error = NULL;
        addressBook1 = ABAddressBookCreate();
        ABAddressBookAddRecord (addressBook1, aRecord, &error);

        if (error != NULL) {
        }
        error = NULL;
        if(ABAddressBookSave ( addressBook1,  &error)){
            addressbookId =  ABRecordGetRecordID (aRecord);
        }

        if (error != NULL) {
        }

        CFRelease(aRecord);
        CFRelease(addressBook1);
        [SVProgressHUD dismiss];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App” message:@"Contact saved successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];

    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App " message:@"Your contat is already exists." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }



}
}

- (void)addThisContact
{
[SVProgressHUD showWithStatus:@"Saving..." maskType:SVProgressHUDMaskTypeClear];

     NSString *strCell=@"1-800-123-1234”;
        NSString *strFirstName=@“fname”;
        NSString *strLastName=@“lname”;

ABRecordRef person = ABPersonCreate();

// set name and other string values
CFErrorRef cfError=nil;
if (strFirstName) {
    ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFTypeRef)(strFirstName) , nil);
}

if (strLastName) {
    ABRecordSetValue(person, kABPersonLastNameProperty, (__bridge CFTypeRef)(strLastName) , nil);
}


ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);
if (strCell)
{
    ABMultiValueAddValueAndLabel(phoneNumberMultiValue, (__bridge CFTypeRef)(strCell), (CFStringRef)@"iPhone", NULL);
}
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, nil);
CFRelease(phoneNumberMultiValue);


//Add person Object to addressbook Object.
ABAddressBookAddRecord(addressBook, person, &cfError);
if (ABAddressBookSave(addressBook, nil))
{
    NSLog(@"\nPerson Saved successfuly");
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App” message:@"Contact saved successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
else
{
    NSLog(@"\n Error Saving person to AddressBook");
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“App” message:@"Contact details are not available." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];
}
[SVProgressHUD dismiss];

}
- (BOOL)checkExistsContacts
{
NSString *strFirstName=@“fname”;
NSString *strLastName=@“lname”;

CFErrorRef err;
ABAddressBookRef adbk = ABAddressBookCreateWithOptions(addressBook,&err);
ABRecordRef moi = NULL;
CFArrayRef matts = ABAddressBookCopyPeopleWithName(adbk, (__bridge CFStringRef)strFirstName);
// might be multiple matts, but let's find the one with last name Neuburg

for (CFIndex ix = 0; ix < CFArrayGetCount(matts); ix++)
{
    ABRecordRef matt = CFArrayGetValueAtIndex(matts, ix);
    CFStringRef last = ABRecordCopyValue(matt, kABPersonLastNameProperty);
    if (last && CFStringCompare(last, (CFStringRef)strLastName, 0) == 0)
        moi = matt;
    if (last)
        CFRelease(last);
}

if (NULL == moi)
{
    NSLog(@"Couldn't find myself");
    CFRelease(matts);
    CFRelease(adbk);
    return NO;
}
else
{
    NSLog(@"number already exists");
    return YES;
}
return NO;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM