显示只有名称以“A”开头的地址簿视图?

时间:2011-07-29 20:29:28

标签: iphone objective-c ios xcode cocoa

有没有办法在用户的iPhone中获取对地址簿的引用,过滤掉所有不以字母“A”开头的联系人,然后显示该过滤后的地址簿?使用UITableView听起来很有可能,但是有一个特殊的视图,它带有所有的地址簿功能吗?

2 个答案:

答案 0 :(得分:2)

要获取姓氏以A开头的所有人的数组,您可以使用以下内容:

ABAddressBook *ab = [ABAddressBook sharedAddressBook];  
ABSearchElement *startsWithA =[ABPerson searchElementForProperty:kABLastNameProperty
                                 label:nil key:nil
                                 value:@"A"
                                 comparison:kABPrefixMatchCaseInsensitive];
NSArray *peopleFound =
    [ab recordsMatchingSearchElement:startsWithA];

获得数组后,您可以在任何需要的自定义视图中使用它。

答案 1 :(得分:0)

此代码片段假定filteredPeople是要用名称以A开头的所有地址簿联系人填充的表视图的dataSource。

这个答案对你也有帮助:Blank field showing up on iPhone AddressBook, how to debug?

此外,Apple还在http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html%23//apple_ref/doc/uid/TP40007744-CH6-SW1

上提供了有关“直接互动:以编程方式访问数据库”的详细信息
      ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
                                                               kCFAllocatorDefault,
                                                               CFArrayGetCount(people),
                                                               people
                                                               );
    NSMutableArray *allNames = (NSMutableArray*)peopleMutable;



   filteredPeople = [[NSMutableArray alloc] init ];

    for (id person in allNames) {
        NSMutableString *firstName = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) autorelease];

        if ([firstName length] > 0){
            NSString* firstChar = [firstName substringToIndex:1];

            if ([firstChar isEqualToString:@"A"] || [firstChar isEqualToString:@"a"]){

                [filteredPeople addObject:person];
            }
        }
    }

    [self.theTableView reloadData];



    CFRelease(addressBook);
    CFRelease(people);
    CFRelease(peopleMutable);