2010-03-07 5 views
2

Je cherche à garder une trace des personnes dans mon application iPhone - soit en les ajoutant à partir de données de contact existantes, ou en invitant l'utilisateur à entrer un nouveau contact qui sera enregistré dans leurs contacts.Comment ajouter un contact depuis une application?

Je sais que je peux créer un enregistrement de personnes ajouter l'écrire dans le carnet d'adresses, est-il possible d'afficher cet écran?
Ou dois-je mettre en œuvre ma propre vue pour faciliter la création d'une entrée de contact?

Screenshot of the New Contact screen on an iPhone http://i48.tinypic.com/2uz7xic.jpg

Répondre

5

Apple fournit ABNewPersonViewController. Si vous souhaitez un exemple de code, voir Quick Contacts, en particulier, cette section:

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

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

[picker release]; 
[navigation release]; 
1

Avez-vous essayé d'utiliser le ABNewPersonViewController? Voir this et recherchez la section intitulée «Inviter l'utilisateur à créer un nouvel enregistrement de personne

+0

très utile aussi bien - Je vous remercie. – barfoon

0

Ci-dessous le code peut utiliser pour toutes les versions 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 *[email protected]"1-800-123-1234”; 
     NSString *[email protected]“fname”; 
     NSString *[email protected]“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 *[email protected]"1-800-123-1234”; 
     NSString *[email protected]“fname”; 
     NSString *[email protected]“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 *[email protected]“fname”; 
NSString *[email protected]“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; 
}