3

ユーザーがアドレス帳から電話番号を選択できるようにする必要があるため、Apple のマニュアルから例を挙げました。しかし、ユーザーがアドレス帳で自分の番号の1つを選択できるようにする方法は、最初の番号だけです。

- (IBAction)adressBook:(UIButton *)sender {
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;

    [self presentModalViewController:picker animated:YES];
}

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
    [self dismissModalViewControllerAnimated:YES];
}

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

    [self displayPerson:person];
    [self dismissModalViewControllerAnimated:YES];

    return NO;
}

- (void)displayPerson:(ABRecordRef)person {

    NSString* phone = nil;
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,
                                                 kABPersonPhoneProperty);
    if (ABMultiValueGetCount(phoneNumbers) > 0) {
        phone = (__bridge_transfer NSString*)
        ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
    } else {
        phone = @"[None]";
    }
    self.telNumber.text = phone;
    CFRelease(phoneNumbers);
}
4

5 に答える 5

2

これは、その人が持っているすべての番号を含むよりも配列を返します。その後、配列から任意の数を選択できます。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    //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]]];
    }

    NSLog(@"Dilip phoneArray : %@",phoneArray);
    NSLog(@"Dilip strPhone : %@",strPhone);

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

    [peoplePicker dismissModalViewControllerAnimated:YES];
    return NO;
}
于 2013-06-28T07:46:24.787 に答える
1

連絡先にアクセスするには;

- (IBAction)getContact:(id)sender{
    ABPeoplePickerNavigationController *pickerPhone =
    [[ABPeoplePickerNavigationController alloc] init];
    pickerPhone.peoplePickerDelegate = self;
    [self presentModalViewController:pickerPhone animated:YES];
    [pickerPhone release];
}

アプリケーションに戻るには (連絡先ビューを閉じる):

- (void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController *)peoplePicker {
    [self dismissModalViewControllerAnimated:YES];
}
于 2013-06-28T07:42:00.097 に答える
0

次のコードが役立つ場合があります。

-(IBAction)fromAddressBook {


ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;

[self presentViewController:picker animated: YES completion:NO];

 }



- (void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController *)peoplePicker {
[self dismissViewControllerAnimated: YES completion:NO];
}





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



return YES;
}




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

if (property == kABPersonPhoneProperty) { // if tapped is equal to a phone property
    CFStringRef cfnumber;
    ABMultiValueRef numbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
    for(CFIndex i = 0; i < ABMultiValueGetCount(numbers); i++) {
        if(identifier == ABMultiValueGetIdentifierAtIndex (numbers, i)) { //if tapped number identifier is the same as identifier number tapped
            cfnumber = ABMultiValueCopyValueAtIndex(numbers, i); // copy the number to CFSTRING number
        }
    }
    NSString *number = [NSString stringWithFormat:@"%@",cfnumber];
    CFRelease(cfnumber);

//do anything you want with the number. example,

    self.notesField.text = number ;

}


[self dismissViewControllerAnimated:YES completion:nil];



return NO;


}




-(BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifierForValue
{
if (property == kABPersonPhoneProperty)
{
    ABMultiValueRef numbers = ABRecordCopyValue(person, property);
    NSString* targetNumber = (__bridge NSString *) ABMultiValueCopyValueAtIndex(numbers, ABMultiValueGetIndexForIdentifier(numbers, identifierForValue));

    NSLog(@"%@", targetNumber);



}
return YES;
}
于 2013-08-12T14:07:30.003 に答える
0

peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:選択されたフィールドに関する詳細情報を提供するデリゲート メソッドを使用します。

于 2013-06-28T07:23:44.813 に答える