Iphone ABUnknownPersonViewController с использованием allowAddingToAddressBook = YES проблема
Позвольте мне объяснить, что я хочу сделать в первую очередь. В нативном Iphone на вкладке "Последние", если вы нажмете на контакт, не найденный в какой-либо адресной книге, у вас есть возможность "Добавить в существующий контакт"
После нажатия "Добавить в существующий контакт", появляется средство выбора, и вы делаете выбор. После этого это приводит вас к ABPersonViewController
автоматически и позволяет редактировать или сохранять новый контакт:
Я пытаюсь воссоздать это, но у меня есть некоторые проблемы. В моей версии, после того как я создаю 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 должен выступать в качестве делегата для этих объектов и контролировать то, что происходит, когда они завершены.