2

私のアプリでは、ユーザーは自分のアドレス帳から連絡先をインポートして、CardDAVサーバーに保存できます。CardDAVサーバー上の連絡先を、アドレス帳内の他のすべてのリンクされた連絡先(iCloudなど)と同期させたいのですが。

アドレス帳の統合連絡先ビューを使用して連絡先を編集すると、リンクされているすべての連絡先が更新されます。アプリのユーザーがアプリを離れることなく同じことを行えるようにしたいと思います。ABPersonViewControllerには、「統合ビュー」を使用してリンクされたすべての連絡先を更新するためのネイティブiOSアドレスブックと同じ機能がありますか?

コントローラにはshouldShowLinkedPeopleというプロパティがありますが、実際に何をするのかわかりません。

4

1 に答える 1

1

私は実際にまったく同じ問題を抱えていて、答えを見つけることができませんでした。しかし、その後、あなたが「shouldShowLinkedPeople」というプロパティに言及しているのを見ました。それがまさに解決策です! プロパティを YES に設定するだけで、リンクされたすべての連絡先を ABPersonViewController で表示および編集できるようになります。

これが私がやったことです(私のアプリはABPeoplePickerNavigationControllerを利用しています):

ABPeoplePickerNavigationControllerDelegate に準拠する ABPeoplePickerNavigationController のサブクラス:

#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

@interface ContactsViewController : ABPeoplePickerNavigationController <ABPeoplePickerNavigationControllerDelegate>

@end

ABPeoplePickerNavigationController で連絡先をクリックして、ABPersonViewController を介して連絡先を表示/編集できるメソッドを実装します。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    ABPersonViewController *contactDetailViewController = [[ABPersonViewController alloc] init];
    contactDetailViewController.shouldShowLinkedPeople = YES;
    contactDetailViewController.displayedPerson = person;
    contactDetailViewController.allowsEditing = YES;

    [self pushViewController:contactDetailViewController
                    animated:YES];

    return NO;
}

リンクされている連絡先 (Facebook、iCloud など) を編集するには、次の行を含める必要があります。

contactDetailViewController.shouldShowLinkedPeople = YES;

そうしないと、リンクされた連絡先の 1 つしか編集できなくなり、望ましくない場合があります。

于 2013-03-24T05:01:32.653 に答える