2013-05-24 16 views

risposta

15

Sì, è completamente possibile, basta chiedere ad ogni persona record di se ha un'immagine:

Vedere la documentazione: http://developer.apple.com/library/ios/#documentation/AddressBook/Reference/ABPersonRef_iPhoneOS/Reference/reference.html#//apple_ref/doc/uid/TP40007210

funzioni rilevanti:

ABPersonHasImageData(person) 
ABPersonCopyImageDataWithFormat(person) 

Il ABPersonCopyImageDataWithFormat restituisce un CFDataRef. Convertire a NSData con questo (ARC) NSData* data = (__bridge_transfer NSData*) cfData;

Un'immagine può quindi essere creata con [UIImage imageWithData:data]

+0

Grazie per la risposta! Mi aiuterà molto! – lightless07

8

Questo è davvero bello il codice che ho trovato per selezionare tutto l'inaformation contatto e magari utile per l'utente futuro ..

aggiungere quadro AddressBookUI e AddressBook nel progetto

Than nel file h

#import <UIKit/UIKit.h> 
#import <AddressBookUI/AddressBookUI.h> 

@interface ViewController : UIViewController<ABPeoplePickerNavigationControllerDelegate,UIAlertViewDelegate,UITextFieldDelegate,UINavigationControllerDelegate> 
{ 
    NSString * toEmail; 
} 

- (IBAction)getCaontactDetail:(id)sender; 

@end 

E nel file .m

- (IBAction)getCaontactDetail:(id)sender { 
    //open contact book 
    ABPeoplePickerNavigationController *addressBookController = [[ABPeoplePickerNavigationController alloc]init]; 
    addressBookController.peoplePickerDelegate = self; 
    addressBookController.delegate = self; 

    addressBookController.navigationBar.tintColor = [UIColor redColor]; 
    addressBookController.searchDisplayController.searchBar.tintColor = [UIColor redColor]; 
    addressBookController.searchDisplayController.searchBar.backgroundColor = [UIColor blackColor]; 

    if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ 
     [self presentViewController:addressBookController animated:YES completion:nil]; 
    } else { 
     [self presentModalViewController:addressBookController animated:YES]; 
    } 

    addressBookController = nil; 
} 

#pragma mark - 
#pragma mark ABPeoplePickerNavigationController Delegate Method 
// called when address book closed 
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker 
{ 
    if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ 
     [peoplePicker dismissViewControllerAnimated:YES completion:nil]; 
    } else { 
     [peoplePicker dismissModalViewControllerAnimated:YES]; 
    } 
} 

// called when select any contact from address book 
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    //parse all data of selected contact 
    ABMultiValueRef addresses = (__bridge ABMultiValueRef)((__bridge NSMutableDictionary *)ABRecordCopyValue(person, kABPersonAddressProperty)); 
    NSArray *addressesArray = (__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(addresses); 
    NSDictionary *dictAddress = [addressesArray objectAtIndex:0]; 

    //get the phone number 
    ABMultiValueRef phone = (__bridge ABMultiValueRef)((__bridge NSMutableDictionary *)ABRecordCopyValue(person, kABPersonPhoneProperty)); 
    NSArray *phoneArray = (__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(phone); 
    NSMutableString *strPhone = [NSMutableString string]; 

    for (int i=0; i<[phoneArray count]; i++) 
    { 
     [strPhone appendString:[NSString stringWithFormat:@"%@,",[phoneArray objectAtIndex:i]]]; 
    } 

    //convert in to NSString and NSInteger 
    NSInteger contactId = (NSInteger) ABRecordGetRecordID(person); 
    NSString *firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty)[email protected]"":(__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *lastName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)[email protected]"":(__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
    NSString *street = [dictAddress valueForKey:@"Street"][email protected]"":[dictAddress valueForKey:@"Street"]; 
    NSString *telephone = [strPhone stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]]; 
    NSString *city = [dictAddress valueForKey:@"City"][email protected]"":[dictAddress valueForKey:@"City"]; 
    NSString *postcode = [dictAddress valueForKey:@"ZIP"][email protected]"":[dictAddress valueForKey:@"ZIP"]; 
    NSString *state = [dictAddress valueForKey:@"State"][email protected]"":[dictAddress valueForKey:@"State"]; 
    NSString *country = [dictAddress valueForKey:@"CountryCode"][email protected]"":[dictAddress valueForKey:@"CountryCode"]; 


    NSString *recipientName = [NSString stringWithFormat:@"%@ %@",firstName,lastName]; 

    NSLog(@"contactId : %i recipientName : %@ street : %@ telephone : %@ city : %@ postcode : %@ state : %@ country : %@",contactId,recipientName,street,telephone,city,postcode,state,country); 

//get the contact image 
    UIImage *img ; 
    if (person != nil && ABPersonHasImageData(person)) { 
     if (&ABPersonCopyImageDataWithFormat != nil) { 
      // iOS >= 4.1 
      img= [UIImage imageWithData:(__bridge NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail)]; 
     } else { 
      // iOS < 4.1 
      img= [UIImage imageWithData:(__bridge NSData *)ABPersonCopyImageData(person)]; 
     } 
    } else { 
     img= nil; 
    } 
    contactIV.image = img; 
    contactNameLbl.text = [NSString stringWithFormat:@"%@ %@",firstName,lastName]; 
    contactNumLbl.text = telephone; 


    //get email address 
    ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
    NSArray *emailArray = (__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(emails); 

    //display alert if contact does not contain email addreess 
    if (emailArray.count == 0) { 
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:nil message:@"The person you selected does not have an email address on file. Please enter their email address below." delegate:self cancelButtonTitle:nil otherButtonTitles:@"Cancel",@"Submit",nil]; 
     alert.tag = 1; 
     alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
     UITextField * alertTextField = [alert textFieldAtIndex:0]; 
     // assert(alertTextField); 
     alertTextField.delegate = self; 
     alertTextField.keyboardType = UIKeyboardTypeEmailAddress; 
     alertTextField.placeholder = @"Enter Email address"; 
     [alert show]; 
    } 

    contactEmailLbl.text = [emailArray objectAtIndex:0]; 

    //set all object to nil for memory management 
    dictAddress = nil; 
    addresses = nil; 
    addressesArray = nil; 

    phone = nil; 
    phoneArray = nil; 
    strPhone = nil; 

    if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){ 
     [peoplePicker dismissViewControllerAnimated:YES completion:nil]; 
    } else { 
     [peoplePicker dismissModalViewControllerAnimated:YES]; 
    } 
    return NO; 
} 



// called to show detail of contact and user select contact 
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
     shouldContinueAfterSelectingPerson:(ABRecordRef)person 
           property:(ABPropertyID)property 
           identifier:(ABMultiValueIdentifier)identifier 
{ 
    return NO; 
} 
+1

L'inclusione del <4.1 codice causa un avviso in XCode 6.1 poiché 4.1 non è più supportato in ogni caso. Questa è la risposta corretta, dato che in realtà fornisce un esempio di codice – d2burke

Problemi correlati