Ios 如何防止peoplePickerNavigationController自动解除

Ios 如何防止peoplePickerNavigationController自动解除,ios,ipad,ios8,peoplepicker,Ios,Ipad,Ios8,Peoplepicker,在iOS 8中,以下内容已被弃用: -(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePickerNavigationController在选择person:(ABRecordRef)person后应继续 现在我们应该使用: -(无效)peoplePickerNavigationController:didSelectPerson: 但是,这种方法在第一次选择旧版本没有选择的人员后

在iOS 8中,以下内容已被弃用:

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePickerNavigationController在选择person:(ABRecordRef)person后应继续

现在我们应该使用:

-(无效)peoplePickerNavigationController:didSelectPerson:

但是,这种方法在第一次选择旧版本没有选择的人员后,会自动取消人员选取器。我有一个例程,需要记录用户逐个选择的每个名称。我可以在每次选择后重新显示人员选择器,但它会在联系人列表的第一个姓名处重新启动联系人列表


我希望我的解释是正确的。有人知道如何防止在iOS 8中像在iOS 7中那样自动解除peoplepickernavigationcontroller吗?

我找到了一个解决方案,可以在选择属性后重新显示peoplepickernavigationcontroller

实现当某人选择联系人属性时处理的委托方法(仅由iOS 8调用):我的诀窍是先取消选择,然后在完成委托中立即调用我的“show picker”方法(是的,委托中的委托)

如果您希望它显示在上次停止的位置,请确保初始化人员选择器一次。希望这有帮助

这是我的showPeoplePickerController方法

#pragma mark Show all contacts
// Called when users tap "Display Picker" in the application. Displays a list of contacts and allows users to select a contact from that list.
-(void)showPeoplePickerController

{
        picker.peoplePickerDelegate = self;
        picker.delegate = self;
        picker.visibleViewController.searchDisplayController.searchBar.delegate = self;

        [self presentViewController:picker animated:NO completion:nil];  
}
首先初始化选择器。请注意,联系人访问首先需要一个授权方法调用

picker = [[ABPeoplePickerNavigationController alloc] init];
//have self prompt first, then based off answer prompt them with internal address book stuff or now
if(ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
    // show picker UI if the user has granted access to their Contacts
    [self showPeoplePickerController];
}
注:

  • 我以前在加载视图时启动了人员选择器。一次
  • 在呈现和解除控制器时,将“动画”选项设置为“否”,有助于使过渡更加平滑

在ABPeoplePickerNavigationController的文档中,查看predicateForSelectionOfPerson的注释

// Optionally determines if a selected person should be returned to the app (predicate evaluates to TRUE),
// or if the selected person should be displayed (predicate evaluates to FALSE).
// If not set and -peoplePickerNavigationController:didSelectPerson: is implemented the selected person is returned to the app,
// or if not set and -peoplePickerNavigationController:didSelectPerson:identifier: is implemented the selected person is displayed.
//
@property(nonatomic,copy) NSPredicate *predicateForSelectionOfPerson NS_AVAILABLE_IOS(8_0);
因此,如果要显示所选人员,需要将谓词设置为FALSE

    if ([picker respondsToSelector:@selector(setPredicateForSelectionOfPerson:)])
{
    picker.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:NO];
}

你找到解决办法了吗?@NikitaIvaniushchenko请看下面我的答案。不太有效。也许我做错了什么。您如何在视图加载中初始化选择器?@JackRomano您的代码在哪里中断?还有更多的信息吗?不管怎么说,都不一样。在此之前,我曾有机会将另一个视图控制器推到同一导航堆栈中,但现在ABPeoplePickerNavigationController被自动取消。
    if ([picker respondsToSelector:@selector(setPredicateForSelectionOfPerson:)])
{
    picker.predicateForSelectionOfPerson = [NSPredicate predicateWithValue:NO];
}