Получить номер телефона от людейПикерНавигацияКонтроллер - PullRequest
1 голос
/ 18 декабря 2010

Обзор: я пытаюсь получить номер телефона и полное имя, когда люди используют peoplePicker и нажимают на имя.Затем я хотел бы отобразить полное имя в текстовом поле и сохранить номер телефона в виде строки.Используя ph num и name, я намерен использовать это как уникальную идентификацию.Я не хочу использовать уникальный идентификатор ABRecord, потому что иногда у меня есть дубликаты на моих контактах, особенно когда я синхронизирую его с Google и т. Д. ...

Если я правильно понимаю, мне нужно использовать этот метод делегата

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 

Используя вышеизложенное, я могу получить полное имя для отображения в текстовом поле как scuh

textField.text = ABRecordCopyCompositeName(person);

Но я не знаю, как получить номер телефона.Чтобы получить номер телефона, я должен использовать другой метод делегата:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier

    ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
    NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,identifier);

Однако мне это не нравится, потому что тогда, когда пользователь нажимает на имя в адресной книге, он показываетдетали с номером телефона, адрес электронной почты и т. д., и пользователь должен нажать на номер телефона.То, что я хочу, это с первого экрана, пользователь нажимает на имя, и имя отображается в виде textField, а номер телефона сохраняется в виде строки где-то.

Ответы [ 2 ]

1 голос
/ 21 января 2013

Если вы хотите получить только первый адрес электронной почты и номер телефона, используйте этот код.Это для iOS 5.0 с Xcode 4.2

- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{

    //NSLog(@"Went here 1 ...");

    NSString *nameStr = (__bridge NSString *)ABRecordCopyCompositeName(person);
    ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty);
    ABMultiValueRef phones = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonPhoneProperty);

    NSString *emailStr = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
    NSString *phoneStr = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phones, 0);

    //strip number from brakets
    NSMutableString *tmpStr1 = [NSMutableString stringWithFormat:@"%@", phoneStr];
    NSString *strippedStr1 = [tmpStr1 stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"()-"];
    strippedStr1 = [[strippedStr1 componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];

    NSLog(@"nameStr: %@ ... emailStr: %@ ... phoneStr: %@ ...", nameStr, emailStr,strippedStr1);

    //dismiss
    [self dismissModalViewControllerAnimated:YES];

    return NO;
}
1 голос
/ 18 декабря 2010

Я использую метод, чтобы сохранить всех людей с электронными письмами в массиве и затем отобразить массив в виде таблицы:

ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);


NSMutableArray *mArr = [[NSMutableArray alloc]init];

for( int i = 0 ; i < nPeople ; i++ )
{
    ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
    NSString *preName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
    NSString *postName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
    ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty);
    int ecount = ABMultiValueGetCount(emails);

    for (int i = 0; i < ecount; i++) {
        NSMutableDictionary *dd = [[NSMutableDictionary alloc]init];

        [dd setValue:[NSString stringWithFormat:@"%@ %@", preName, postName] forKey:@"name"];

        NSString *emailID = (NSString *)ABMultiValueCopyValueAtIndex(emails, i);
        [dd setValue:emailID forKey:@"mail"];
        //NSLog(@"inside loop %@ %@ %@", preName, postName, emailID);
        [emailID release];


        [mArr addObject:dd];
        [dd release];
    }
}

emailArray = [[NSArray alloc]initWithArray:mArr];
[mArr release];
...