Iphone ABUnknownPersonViewController с использованием allowAddingToAddressBook = YES проблема

Позвольте мне объяснить, что я хочу сделать в первую очередь. В нативном Iphone на вкладке "Последние", если вы нажмете на контакт, не найденный в какой-либо адресной книге, у вас есть возможность "Добавить в существующий контакт"

Iphone Recents Item

После нажатия "Добавить в существующий контакт", появляется средство выбора, и вы делаете выбор. После этого это приводит вас к ABPersonViewController автоматически и позволяет редактировать или сохранять новый контакт:

PersonViewController

Я пытаюсь воссоздать это, но у меня есть некоторые проблемы. В моей версии, после того как я создаю UnknownPersonViewController и конечный пользователь нажимает "Добавить в существующий контакт", появляется средство выбора и позволяет выбирать из адресной книги аналогично родному Iphone. Но после выбора имя автоматически добавляется в адресную книгу, и не появляется personViewController, чтобы дать пользователю выбор, добавлять контакт или нет. Даже если бы я мог просто сделать так, чтобы он не записывал автоматически в адресную книгу после выбора, я мог бы просто показать, что personviewcontroller находится в режиме редактирования сразу же.

Поэтому моя проблема заключается в том, почему автоматически обновляется адресная книга после выбора? Я помещаю контроллер ABUnknownpersonview на контроллер навигации UITableviewController. и я тестирую на физическом устройстве с iOS 6.01 Вот код:

 ABRecordRef person = ABPersonCreate ();
 ABMutableMultiValueRef multiValue = ABMultiValueCreateMutable(kABStringPropertyType);
    ABMultiValueAddValueAndLabel(multiValue, call.number,      kABPersonPhoneMainLabel, 
                                 NULL);
    ABRecordSetValue(person, kABPersonPhoneProperty, multiValue, error);
    if(multiValue) CFRelease(multiValue);


 ABUnknownPersonViewController *unknownCtrl = [[ABUnknownPersonViewController alloc] init];
unknownCtrl.displayedPerson = person; //this has a phone number with "main" label
unknownCtrl.allowsActions = YES;
unknownCtrl.allowsAddingToAddressBook = YES;
unknownCtrl.editing=NO;
unknownCtrl.unknownPersonViewDelegate = self;

    // unknownCtrl.addressBook=ABAddressBookCreate(); // I tried setting addressbook to nil and object
unknownCtrl.addressBook=nil;

[self setTitle:call.type forUIViewController:unknownCtrl];

[self.navigationController pushViewController:unknownCtrl animated:YES];

примечание: у меня похожая проблема с этим постом: http://forums.macrumors.com/archive/index.php/t-1023140.html

и, возможно, https://discussions.apple.com/thread/1682620?start=0&tstart=0

ОБНОВЛЕНИЕ: кажется, если я помещаю kABPersonPhoneMainLabel от человека, тогда это не пишет номер телефона контакту. После того, что я сделал в делегате didResolveToPerson, я вызываю personviewcontroller в режиме редактирования. Это имитирует нативное поведение. Это может ответить на мой собственный вопрос, спасибо всем.

1 ответ

ABUnknownPersonViewController не предоставляет много вариантов настройки, вам нужно реализовать собственную версию. Это не так уж сложно - кнопка "Создать новый контакт" просто запускает ABNewPersonViewControllerи "Добавить в существующий контакт" запускает ABPeoplePickerNavigationController, Ваш ViewController должен выступать в качестве делегата для этих объектов и контролировать то, что происходит, когда они завершены.

Другие вопросы по тегам