0

Apple Address Book Programming Guide for iOSに従って、アドレス帳から電話番号を取得しましたUITextField。しかし、私は2つ持っておりUITextField、2番目のテキストフィールドに同じ機能を実装する方法がわかりません.

ピープル ピッカーの紹介

- (IBAction)showPicker:(id)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;

}



- (BOOL)peoplePickerNavigationController:

            (ABPeoplePickerNavigationController *)peoplePicker

      shouldContinueAfterSelectingPerson:(ABRecordRef)person

                                property:(ABPropertyID)property

                              identifier:(ABMultiValueIdentifier)identifier

{

    return NO;

}

個人情報の表示

- (void)displayPerson:(ABRecordRef)person

{

    NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person,

                                               kABPersonFirstNameProperty);

    self.firstName.text = name;



    NSString* phone = nil;

    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person,

                                    kABPersonPhoneProperty);

    if (ABMultiValueGetCount(phoneNumbers) > 0) {

       phone = (__bridge_transfer NSString*)

               ABMultiValueCopyValueAtIndex(phoneNumbers, 0);

    } else {

        phone = @"[None]";

    }

    self.phoneNumber.text = phone;

}

編集

- (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.phoneNumber.text = phone;



    if (ABMultiValueGetCount(phoneNumbers) > 1) {

        phone = (__bridge_transfer NSString*)

        ABMultiValueCopyValueAtIndex(phoneNumbers, 1);

    } else {

        phone = @"None";

    }

    self.phoneNumber2.text = phone;


}

ここに画像の説明を入力

4

1 に答える 1

1

UITextField2 番目の電話番号が存在する場合は、2 番目の番号だと思いますか? 次に、次のことができます。

if (ABMultiValueGetCount(phoneNumbers) > 1) {
   phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 1);
} else {
    phone = @"[None]";
}

self.phoneNumber2.text = phone;

CFBridgingReleaseまたは、代わりに使用できます__bridge_transfer

phone = CFBridgingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, 1));

ところで、各電話番号の種類を取得するために を使用したいと思いABMultiValueCopyLabelAtIndexませんか (番号の種類がわからない場合、電話番号が何であるかを知ることは役に立ちません)。これら 2 つの電話番号ラベルを 2 つの追加の UITextFields (おそらくそれぞれの電話番号の隣) に保存できます。


アップデート:

私は当初、あなたが同じ連絡先から 2 つの電話番号を探していると思っていました。ボタンをタップする 2 つの電話番号テキスト フィールドのそれぞれの横に「+」ボタンがあり、そのテキスト フィールドの電話番号をプルアップするユーザー インターフェースから推測します。次に、別のテキスト フィールドの横にある [+] ボタンをタップし、別の連絡先の電話番号を取り出して、そのテキスト フィールドに入力します。

したがって、この場合は、次のように ivar をクラスに追加できます。

int _phoneNumberIndex;

そして、最初の「+」ボタンには次のIBActionようなものがあります。

- (IBAction)showPicker1:(id)sender
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];

    picker.peoplePickerDelegate = self;

    _phoneNumberIndex = 1;

    [self presentModalViewController:picker animated:YES];
}

2番目の「+」ボタンには次のIBActionようなものがあります:

- (IBAction)showPicker2:(id)sender
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];

    picker.peoplePickerDelegate = self;

    _phoneNumberIndex = 2;

    [self presentModalViewController:picker animated:YES];
}

次に、あなたdisplayPersonは次のようになります:

- (void)displayPerson:(ABRecordRef)person
{
    // first name

    NSString* name = CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));

    self.firstName.text = name;

    // phone numbers

    NSString* phone;

    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);

    // first phone number

    if (ABMultiValueGetCount(phoneNumbers) > 0)
        phone = CFBridingRelease(ABMultiValueCopyValueAtIndex(phoneNumbers, 0));
    else
        phone = @"[None]";

    if (_phoneNumberIndex == 1)
        self.phoneNumber.text = phone;
    else if (_phoneNumberIndex == 2)
        self.phoneNumber2.text = phone;
    else
        NSLog(@"Unrecognized _phoneNumberIndex");

    CFRelease(phoneNumbers);
}

ところで、これはあなたが探しているものだと思いますが、名フィールドで何をすべきかは明確ではありません (2 つの連絡先を選択しているため、どちらの名を使用したいですか?電話番号の場合と同じように、2 つの名を 2 つのフィールドに保存しますか?)。だから、あなたはそれを見なければならないでしょう。

明らかに、IBAction2 つの「+」ボタンに 2 つのメソッドが必要ない場合はsender、タグを参照する 1 つのメソッドを実行できますが、それは質問にとって重要ではありません。要するに、ivar を使用して、更新する電話番号を指定します。

于 2012-05-28T03:13:03.320 に答える