3

Apple の Address book プログラミング ガイドに従おうとしていますが、peoplePickerController について質問があります。Apple チュートリアルの写真の例には、右上に「プラス」ボタンがあり、ユーザーは peoplePickerController を介して新しい連絡先を追加できるようです。

経由で ABPeopleNavigationControllerPicker を呼び出しました


- (void)showPicker
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;

    [self presentViewController:picker animated:YES completion:nil];
}

ただし、プラス ボタンの代わりに、画面の右上にキャンセル ボタンがあります。ボタンを変更したり、ユーザーがこのView Controllerを介して新しい連絡先を追加できるようにするオプションはありますか?

しばらくGoogle検索を行った後、以下が見つかりました。だから私はプログラムでバーボタンを変更しようとしました...


- (void)addPerson
{
    ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController alloc] init];
    newPersonVC.newPersonViewDelegate = self;
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:newPersonVC];
    [self presentViewController:nc animated:YES completion:nil];
}
- (void)showPicker
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];
    picker.peoplePickerDelegate = self;
    [self presentViewController:picker animated:YES completion:nil];
}

ただ、なぜかバーボタンが「追加」ではなく「キャンセル」のまま固定されている…

4

3 に答える 3

0

気にしないでください、私は今それを働かせました。ボタンをオーバーライドする前にViewControllerを提示する必要があるようです...


- (void)showPicker
{
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
    [self presentViewController:picker animated:YES completion:nil];
    [picker.topViewController setEdit:YES];
    picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];
}

于 2013-01-10T14:49:35.323 に答える
-1

addPerson メソッドを少し変更するだけです。

連絡先を表示する場合:

-(void)showPicker

{

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController       alloc] init];
  picker.peoplePickerDelegate = self;
  [self presentViewController:picker animated:YES completion:nil];
  [picker.topViewController setEdit:YES];
  [self performSelector:@selector(addContact:) withObject:picker afterDelay:0.1];

}

-(void)addContact:(ABPeoplePickerNavigationController*)ピッカー;

{

picker.topViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addPerson)];

}

このコードにより、連絡先を追加するために右上隅にプラス記号が表示されます。

これには @selector を使用しています。

-(void)addPerson

{

ABNewPersonViewController *newPersonVC = [[ABNewPersonViewController 
alloc] init];
newPersonVC.newPersonViewDelegate = self;
UINavigationController *nc = [[UINavigationController alloc]     initWithRootViewController:newPersonVC];

//これは作業を行う行のコードです。self.presentedViewController を使用すると、//連絡先の追加画面を取得できます。そうしないと、空のビュー階層のようなエラーが発生します。

    [self.presentedViewController presentViewController:nc animated:YES completion:nil];

}

于 2014-06-16T16:38:22.850 に答える