2013-09-30 6 views
13

Apple имеет приятный всеобъемлющий и небольшой пример «QuickContacts» (developer.apple.com/library/IOs/samplecode/QuickContacts/Introduction/Intro.html), в котором изложено основное использование Address Book UI Framework. - Загружаемый исходный код работает, как описано (после добавления в адресную книгу человека с именем «Appleseed») или смените имя человека в строке 246 (QuickContactsViewController.m) на то, что уже существует в вашей адресной книге).iOS7 - ABPersonViewController, режим редактирования

Вопрос: Как мы можем изменить функцию функции -(void)showPersonViewController таким образом, что ABPersonViewController "picker" уже в режиме редактирования (с видимым «Готово» editingButton), когда она открывается (после того, как натягивается на navigationController-х стек).

В версиях iOS до «7» это было прямолинейное дело, просто вставляемое, например, picker.editing = YES;, прежде чем нажимать сборщик на навигационную стек, чтобы увидеть его в режиме редактирования, после его открытия (см. Код ниже).

В iOS7 это больше не работает.

Является ли это ошибкой в ​​iOS7, если это так, есть ли простой рабочий процесс (а не реверсивная разработка класса ABPersonViewController)? - Или это нужно кодировать по-другому, в наши дни?

Ждем ваших комментариев.

-(void)showPersonViewController 
{ 
    // Search for the person named "Appleseed" in the address book 
    NSArray *people = (NSArray *)CFBridgingRelease(ABAddressBookCopyPeopleWithName(self.addressBook, CFSTR("Appleseed"))); 
    // Display "Appleseed" information if found in the address book 
    if ((people != nil) && [people count]) 
    { 
     ABRecordRef person = (__bridge ABRecordRef)[people objectAtIndex:0]; 
     ABPersonViewController *picker = [[ABPersonViewController alloc] init]; 
     picker.personViewDelegate = self; 
     picker.displayedPerson = person; 
     // Allow users to edit the person’s information 
     picker.allowsEditing = YES; 

     picker.editing = YES; // in iOS6 this works, in iOS7 it does not 

     [self.navigationController pushViewController:picker animated:YES]; 
    } 
    ... 
    ... 
} 
+1

Это ошибка в прошивке 7. Чем больше людей, которые сообщают его с более высоким приоритетом исправление будет назначено. http://bugreport.apple.com –

+0

@ Tommie C. - Вы правы, Apple подтвердила, что это ошибка. - Спасибо за ваш комментарий. – user2831473

+0

Это еще не исправлено. Кажется? – SAHM

ответ

10

Вы можете использовать ABNewPersonViewController вместо ABPersonViewController, ниже приведен код:

ABNewPersonViewController *picker = [[[ABNewPersonViewController alloc] init] autorelease]; 
picker.newPersonViewDelegate = self; 
picker.displayedPerson = person; 
[email protected]"edit contact"; 

[self.navigationController pushViewController:picker animated:YES]; 
+1

в протокольном методе - (void) newPersonViewController: didCompleteWithNewPerson: пользователь ABRecordRef будет либо NULL (если пользователь отменяет редактирование), либо исходное значение (инициализировано на picker.displayedPerson = person;) – Vyacheslav

+0

спасатель жизни !!!!! Большое спасибо! – xialin

Смежные вопросы