ABPersonViewController 选择人后消失

Posted

技术标签:

【中文标题】ABPersonViewController 选择人后消失【英文标题】:ABPersonViewController disappear after selecting person 【发布时间】:2014-10-04 18:24:58 【问题描述】:

我对 ABPersonViewController 有疑问。我使用 ABPeoplePickerNavigationControllerDelegate 来显示人员选择器(联系人列表)。当我选择一个人时,我想显示一个 ABPersonViewController。问题是 ABPersonViewController 在选择人员后消失了。详细 -> 我选择一个人 -> ABPersonViewController 出现(具有正确的属性) -> ABPersonViewController 立即消失,完整的人员选择器也消失了。我认为问题在于我将 PeoplePicker 推开。

我读了很多教程,但我不明白。我目前正在为 ios 8 开发。

大多数教程在 peoplepicker 的不同方法中调用 ABPersonViewController,但如果我在另一个委托方法中调用它,它就不起作用。

这是我的代码:

@interface ViewController : UIViewController<ABPeoplePickerNavigationControllerDelegate, ABPersonViewControllerDelegate>

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

    ABPersonViewController *picker = [[ABPersonViewController alloc] init];
    picker.personViewDelegate = self;
    picker.displayedPerson = person;
    picker.displayedProperties = peoplePicker.displayedProperties;
    picker.allowsActions = YES;
    [peoplePicker pushViewController:picker animated:YES];
    return NO;

提前谢谢你。

问候

【问题讨论】:

你为什么要显示你自己的ABPersonViewController?如果您的ABPeoplePickerNavigationControllerDelegate 实施正确,ABPeoplePickerNavigationController 将自动为您显示联系方式。 好的,那么我的问题是如何设置 PersonViewController 的属性以及如何获取 PersonViewController 的选定属性 查看ABPeoplePickerNavigationControllerdisplayedProperties 属性。并实现正确的委托方法,以便在为特定联系人选择属性时得到通知。 好的,听起来不错。我会试试的(: 【参考方案1】:

在 iOS8 中,初始化 ABPeoplePickerNavigationController 时需要添加如下代码,否则 peoplePickerNavigationController 在选择联系人后会立即关闭。

if(IOS8_OR_LATER)
    peoplePicker.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:false];

另外,对于 iOS 8,使用

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier 

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person

代替

在选择人之后应该继续

因为这个方法在 iOS8 中已经被弃用了

【讨论】:

以上是关于ABPersonViewController 选择人后消失的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS8 上将 ABPersonViewController 推送到 ABPeoplePickerNavigationController

为啥我的 ABPersonViewController 没有显示所有属性?

ABPersonViewController 在推送到 PeoplePickerNavigationController 时未检索数据

如何在 iPhone 的横向模式下停止 ABPersonViewController 和 ABNewPersonViewController 的旋转

使用 ABPersonViewController 在 iPhone 应用程序中自定义联系人显示

如何为 A Person View Controller 的导航栏添加返回按钮?