【问题标题】:Displaying address book view with only names that start with 'A'?仅显示以“A”开头的名称的地址簿视图?
【发布时间】:2012-12-12 02:40:29
【问题描述】:

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

【问题讨论】:

  • 不,没有您可以访问的 UI,在几个答案中都举例说明了对数据的笨拙的编程访问

标签: iphone objective-c ios xcode cocoa


【解决方案1】:

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

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

一旦你得到一个数组,你就可以在任何你需要的自定义视图中使用它。

【讨论】:

  • 这仅适用于 OS X。 iOS 没有 ABAddressBook 类
【解决方案2】:

此代码片段假定filteredPeople 是表视图的数据源,您要使用名称以A 开头的所有通讯簿联系人填充。

这个答案也应该对你有所帮助: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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多