2012-02-25 45 views
1

我试图捕获联系人名称的点击,并从那里获取联系信息。而不是点击联系人的信息并从那里点击一个字段。peoplePickerNavigationController捕获实际联系人名称的点击

我能够获取所有需要的数据,但只能在点击进入联系人之后。这里是我当前的代码:

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

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 
     shouldContinueAfterSelectingPerson:(ABRecordRef)person 
     property:(ABPropertyID)property 
     identifier:(ABMultiValueIdentifier)identifier 
{ 
    [self displayPerson:person]; 

    [self dismissModalViewControllerAnimated:YES]; 

    return YES; 
} 

-(void)displayPerson:(ABRecordRef)person 
{ 
    NSString *name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty); 

    NSLog(@"Name: %@", name); 

    NSString *phone = nil; 

    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 

    if (ABMultiValueGetCount(phoneNumbers) > 0) { 

     phone = (__bridge_transfer NSString *) 

     ABMultiValueCopyValueAtIndex(phoneNumbers, 0); 

    } else { 

     phone = @"[None]"; 

    } 

    NSLog(@"Phone: %@", phone); 
} 

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

回答

1

shouldContinueAfterSelectingPerson只需返回NO

按照docs

返回值:
YES以显示联系人和关闭该选择器。
不做任何事情。

所以通过返回NO您可以跳过显示步骤。无论如何,你自己都会解雇这个选择器。

+0

我试过了,没有变化。直到我点击电子邮件字段(例如)后,它仍然不会消失。 – TheTC 2012-02-26 04:21:35

+0

这应该有效。发布您的修改代码。 – 2012-02-26 06:20:31

0

我所用:

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

但是,当我用下面的它工作得很好。这让我疯狂。大声笑

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