2014-02-20 33 views
-2

我是新开发的iphone,我正在研究读取所有联系人并在tableview中显示并读取所有日历事件并在tableview中显示的应用程序。如何访问iOS联系人并在Uitableview中显示

+0

有很多关于如何使用ABAddressBook.framework和朋友的教程。请将您的问题缩小到一个特定问题。 – warrenm

+0

要挑选您使用的联系人Apple App开发指南:https://developer.apple.com/library/ios/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/QuickStart.html#//apple_ref/doc/uid/TP40007744-CH2- SW1 –

+2

http://zcentric.com/2008/09/19/access-the-address-book/试试吧.. – ChenSmile

回答

1

使用ABAddressBook框架。以数组形式获取联系人列表并在UItableview中填充此列表,并且可以使用UITableViewCellAccessoryCheckmark来显示选定的联系人ABAddressBook

+0

非常感谢你的快速回复....你有任何链接以上执行 – user1374

+0

http ://stackoverflow.com/questions/19027118/fetch-contacts-in-ios-7看看这个答案 – Sport

+0

让我知道如果有任何问题 – Sport

2
  • 添加通讯录框架工作。

    • #进口通讯录/ AddressBook.h

然后,我有一个工作的例子:你必须按照更改代码以您的需求:

-(void)loadContact 
{ 
    dispatch_async(dispatch_get_main_queue(), ^(void){ 
     if (loadingView == nil) { 
      loadingView = [LoadingView loadingViewInSuperView:self.view]; 
     } 
    }); 

    ABAddressBookRef ab; 
    ab = ABAddressBookCreate(); 


    int len = (int) ABAddressBookGetPersonCount(ab); 
    NSMutableArray *allPeople = (__bridge NSMutableArray *)ABAddressBookCopyArrayOfAllPeople(ab); 
    int i; 
    for(i = 0; i < len ; i++) 
    { 

     // Initialize the dictionary 
     NSMutableDictionary *dictAddress = [[NSMutableDictionary alloc] init]; 
     ABRecordRef person = (__bridge ABRecordRef)([allPeople objectAtIndex:i]); 

     [dictAddress setValue:@"0" forKey:@"sel"]; 

     [dictAddress setValue:@"" forKey:@"FirstName"]; 
     [dictAddress setValue:@"" forKey:@"LastName"]; 
     [dictAddress setValue:@"" forKey:@"Name"]; 

     [dictAddress setValue:@"" forKey:@"PhoneMobile"]; 
     [dictAddress setValue:@"" forKey:@"PhoneHome"]; 
     [dictAddress setValue:@"" forKey:@"PhoneWork"]; 

     [dictAddress setValue:@"" forKey:@"CompanyName"]; 

     [dictAddress setValue:@"" forKey:@"AddressCity"]; 
     [dictAddress setValue:@"" forKey:@"AddressCountry"]; 
     [dictAddress setValue:@"" forKey:@"AddressState"]; 
     [dictAddress setValue:@"" forKey:@"AddressCountryCode"]; 
     [dictAddress setValue:@"" forKey:@"AddressStreet"]; 
     [dictAddress setValue:@"" forKey:@"AddressZipCode"]; 

     [dictAddress setValue:@"" forKey:@"EmailWork"]; 
     [dictAddress setValue:@"" forKey:@"EmailHome"]; 
     [dictAddress setValue:@"" forKey:@"EmailOther"]; 

     [dictAddress setValue:@"" forKey:@"URLWork"]; 
     [dictAddress setValue:@"" forKey:@"URLHome"]; 
     [dictAddress setValue:@"" forKey:@"URLOther"]; 

     [dictAddress setValue:@"" forKey:@"Note"]; 

     NSMutableString *xmlString = [NSMutableString string]; 

     if(ABRecordCopyValue(person, kABPersonFirstNameProperty) != NULL) 
     { 
      [dictAddress setValue:(NSString*)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty)) forKey:@"FirstName"]; 

      [xmlString appendString:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty)]; 
     } 


     if(ABRecordCopyValue(person, kABPersonLastNameProperty) != NULL) 
     { 
      [dictAddress setValue:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty) forKey:@"LastName"]; 

      [xmlString appendString:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonLastNameProperty)]; 
     } 

     [dictAddress setValue:xmlString forKey:@"Name"]; 

     if(ABRecordCopyValue(person, kABPersonOrganizationProperty) != NULL) 
     { 
      CFStringRef company = ABRecordCopyValue(person, kABPersonOrganizationProperty); 
      if(company) 
      { 
       [dictAddress setValue:(__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonOrganizationProperty) forKey:@"CompanyName"]; 
       CFRelease(company); 
      } 
     } 

     if (ABRecordCopyValue(person, kABPersonPhoneProperty) != NULL) 
     { 

      ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonPhoneProperty)); 

      NSString* [email protected]""; 
      NSString* phoneLabel; 

      for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) 
      { 
       phoneLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(phones, i); 

       //if([phoneLabel isEqualToString:@"_$!<Main>!$_"]) 
       if([phoneLabel isEqualToString:@"_$!<Home>!$_"]) 
       { 
        Str = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phones, i); 
        Str = [Str stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
        Str = [Str stringByReplacingOccurrencesOfString:@")" withString:@""]; 
        Str = [Str stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
        Str =[[Str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; 




        [dictAddress setValue:Str forKey:@"PhoneHome"]; 
       } 
       else if([phoneLabel isEqualToString:@"_$!<Mobile>!$_"]) 
       { 
        Str = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phones, i); 
        Str = [Str stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
        Str = [Str stringByReplacingOccurrencesOfString:@")" withString:@""]; 
        Str =[[Str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; 
        Str = [Str stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
        [dictAddress setValue:Str forKey:@"PhoneMobile"]; 
       } 
       //else if([phoneLabel isEqualToString:@"_$!<Other>!$_"]) 
       else if([phoneLabel isEqualToString:@"_$!<Work>!$_"]) 
       { 
        Str = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phones, i); 
        Str = [Str stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
        Str = [Str stringByReplacingOccurrencesOfString:@")" withString:@""]; 
        Str =[[Str componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]; 
        Str = [Str stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
        [dictAddress setValue:Str forKey:@"PhoneWork"]; 
       } 
      } 
      CFRelease(phones); 

     } 


     if (ABRecordCopyValue(person, kABPersonAddressProperty) != NULL) 
     { 

      //Person address 
      ABMultiValueRef addresses = ABRecordCopyValue(person, kABPersonAddressProperty); 
      if(ABMultiValueGetCount(addresses) != 0) 
      { 
       for(int i=0;i<ABMultiValueGetCount(addresses);i++) 
       { 
        CFStringRef address = ABMultiValueCopyValueAtIndex(addresses, i); 


        NSString *StrCity = [NSString stringWithFormat:@"%@", [(__bridge NSDictionary*)address objectForKey:@"City"]]; 
        [dictAddress setValue:StrCity forKey:@"AddressCity"]; 

        NSString *StrCountry = [NSString stringWithFormat:@"%@", [ (__bridge 
                       NSDictionary*)address objectForKey:@"Country"]]; 
        [dictAddress setValue:StrCountry forKey:@"AddressCountry"]; 

        NSString *StrState = [NSString stringWithFormat:@"%@",[(__bridge NSDictionary*)address objectForKey:@"State"]]; 
        [dictAddress setValue:StrState forKey:@"AddressState"]; 

        NSString *StrCountryCode = [NSString stringWithFormat:@"%@",[(__bridge NSDictionary*)address objectForKey:@"CountryCode"]]; 
        [dictAddress setValue:StrCountryCode forKey:@"AddressCountryCode"]; 

        NSString *StrStreet = (NSString*)[(__bridge NSDictionary*)address objectForKey:@"Street"]; 
        [dictAddress setValue:StrStreet forKey:@"AddressStreet"]; 

        NSString *StrZip = [NSString stringWithFormat:@"%@",[(__bridge NSDictionary*)address objectForKey:@"ZIP"]]; 
        [dictAddress setValue:StrZip forKey:@"AddressZipCode"]; 

       } 

      } 
      else 
       CFRelease(addresses); 
     } 

     if (ABRecordCopyValue(person, kABPersonEmailProperty) != NULL) 
     { 
      //person email 

      NSString* emailLabel; 

      ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
      if(ABMultiValueGetCount(emails) != 0) 
      { 
       for(int i=0;i<ABMultiValueGetCount(emails);i++) 
       { 
        emailLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(emails, i); 

        if ([emailLabel isEqualToString:@"_$!<Work>!$_"]) 
        { 
         [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(emails, i)) forKey:@"EmailWork"]; 
        } 
        else if([emailLabel isEqualToString:@"_$!<Home>!$_"]) 
        { 
         [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(emails, i)) forKey:@"EmailHome"]; 
        } 
        else if([emailLabel isEqualToString:@"_$!<Other>!$_"]) 
        { 
         [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(emails, i)) forKey:@"EmailOther"]; 
        } 
       } 
      } 
      else 
       CFRelease(emails); 
     } 


     if(ABRecordCopyValue(person, kABPersonURLProperty) != NULL) 
     { 
      NSString* URLLabel; 

      ABMultiValueRef urls = ABRecordCopyValue(person, kABPersonURLProperty); 
      if(ABMultiValueGetCount(urls) != 0) 
      { 
       for(int i=0;i<ABMultiValueGetCount(urls);i++) 
       { 
        URLLabel = (__bridge_transfer NSString*)ABMultiValueCopyLabelAtIndex(urls, i); 

        if ([URLLabel isEqualToString:@"_$!<Work>!$_"]) 
        { 
         [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(urls, i)) forKey:@"URLWork"]; 
        } 
        else if([URLLabel isEqualToString:@"_$!<Home>!$_"]) 
        { 
         [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(urls, i)) forKey:@"URLHome"]; 
        } 
        else if([URLLabel isEqualToString:@"_$!<Other>!$_"]) 
        { 
         [dictAddress setValue:(__bridge id)(ABMultiValueCopyValueAtIndex(urls, i)) forKey:@"URLOther"]; 
        } 

       } 
      } 

     } 

     if(ABRecordCopyValue(person, kABPersonNoteProperty) != NULL) 
     { 
      [dictAddress setValue:(__bridge NSString*)ABRecordCopyValue(person, kABPersonNoteProperty) forKey:@"Note"]; 
     } 


     if (ABRecordCopyValue(person, kABPersonCreationDateProperty) != NULL) 
     { 
      [dictAddress setValue:(__bridge NSString*)ABRecordCopyValue(person, kABPersonCreationDateProperty) forKey:@"CreationDate"]; 
     } 


     if (ABRecordCopyValue(person, kABPersonModificationDateProperty) != NULL) 
     { 
      [dictAddress setValue:(__bridge NSString*)ABRecordCopyValue(person, kABPersonModificationDateProperty) forKey:@"ModificationDate"]; 
     } 

     /* 
     if (![[dictAddress valueForKey:@"EmailHome"] isEqualToString:@""] || ![[dictAddress valueForKey:@"EmailOther"] isEqualToString:@""] || ![[dictAddress valueForKey:@"EmailWork"] isEqualToString:@""]) 
     { 
     dictAddress = nil; 
     }*/ 

     NSLog(@"%@",dictAddress); 

     NSMutableArray *numberDict = [[NSMutableArray alloc]init]; 
     if (![[dictAddress valueForKey:@"PhoneHome"] isEqualToString:@""]) { 
//   [numberDict setValue:[dictAddress valueForKey:@"PhoneHome"] forKey:@"PhoneHome"]; 
      [numberDict addObject:[dictAddress valueForKey:@"PhoneHome"]]; 
     } 
     if (![[dictAddress valueForKey:@"PhoneMobile"] isEqualToString:@""]) { 
//   [numberDict setValue:[dictAddress valueForKey:@"PhoneMobile"] forKey:@"PhoneMobile"]; 
      [numberDict addObject:[dictAddress valueForKey:@"PhoneMobile"]]; 
     } 
     if (![[dictAddress valueForKey:@"PhoneWork"] isEqualToString:@""]) { 
      [numberDict addObject:[dictAddress valueForKey:@"PhoneWork"]]; 
//   [numberDict setValue:[dictAddress valueForKey:@"PhoneWork"] forKey:@"PhoneWork"]; 
     } 
     [dictPhoneNumberFinal setObject:numberDict forKey:[dictAddress valueForKey:@"FirstName"]]; 
    } 
    dispatch_async(dispatch_get_main_queue(), ^(void){ 
     if (loadingView) { 
      [loadingView removeView]; 
      loadingView = nil; 
     } 
    }); 


    //arrContactNames = [[dictPhoneNumberFinal allKeys] mutableCopy]; 

    arrContactNames =[[[dictPhoneNumberFinal allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] mutableCopy]; 




    if(arrContactNames.count != 0) 
    { 
     [tblView reloadData]; 
     //  UIView *view = [[UIView alloc] initWithFrame:self.tableView.frame]; 
     //    [view setUserInteractionEnabled:FALSE]; 
     // 
     //  [view setBackgroundColor:[UIColor clearColor]]; 
     //  [self.tableView addSubview:view]; 
     //  [self.tableView setScrollEnabled:NO]; 
     //  [self addPopOverViewWithTag:1 :arrContactNames]; 

    } 
    else{ 
     [appDelegate userAlert:@"No contacts available."]; 
    } 
} 
+0

我可以得到你的工作示例..我使用故事板,所以得到问题 – user1374