2014-10-04 1 views
0

У меня есть вопрос об ABPersonViewController. Я использую ABPeoplePickerNavigationControllerDelegate, чтобы показать сборщик людей (список контактов). Я хочу показать ABPersonViewController, когда я выбираю человека. Проблема в том, что ABPersonViewController исчезает после выбора человека. Подробно -> Я выбираю человека -> Появляется ABPersonViewController (с правильными свойствами) -> ABPersonViewController немедленно рассылается, а также полный peoplepicker. Я думаю, проблема в том, что я оттолкнул PeoplePicker.ABPersonViewController исчезает после выбора человека

Я много читал в учебниках, но я не понимаю. В настоящее время я разрабатываю для IOS 8.

Большинство учебных руководств вызывает ABPersonViewController в другом методе peoplepicker, но если я его вызову в другом методе делегата, он не работает.

Вот мой код:

@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; 
} 

Спасибо заранее.

Приветствия

+1

Почему вы показываете свой собственный 'ABPersonViewController'? «ABPeoplePickerNavigationController» автоматически отобразит ваши контактные данные, если ваш «ABPeoplePavlerNavigationControllerDelegate» будет правильно реализован. – rmaddy

+0

Хорошо, тогда мой вопрос: как установить свойства для PersonViewController и как я могу получить выбранное свойство PersonViewController? –

+1

Посмотрите на свойство 'displayProperties'' ABPeoplePickerNavigationController'. И реализуйте правильные методы делегирования, чтобы получать уведомления, когда свойство выбрано для определенного контакта. – rmaddy

ответ

0

В iOS8, вам нужно будет добавить код, как показано ниже, когда вы инициализацию ABPeoplePickerNavigationController, иначе peoplePickerNavigationController уволят сразу после выбора контакта.

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

Кроме того, для прошивки 8, использовать

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

или

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

Вместо

shouldContinueAfterSelectingPerson

Поскольку этот метод устарел в iOS8