iOS7 - ABPersonViewController,编辑模式

时间:2013-09-30 16:20:59

标签: ios ios7 addressbook abpersonviewcontroller

Apple提供了一个很好的全面小例子,“QuickContacts”(developer.apple.com/library/IOs/samplecode/QuickContacts/Introduction/Intro.html),概述了Address Book UI Framework的基本用法。 - 可下载的源代码按照描述的方式工作(一旦将名为“Appleseed”的人添加到地址簿中,或者将第246行(QuickContactsViewController.m)中的人名更改为地址簿中已存在的内容)。

问题: 我们如何修改函数-(void)showPersonViewController函数,使ABPersonViewController "picker"已经处于编辑模式(带有可见的“完成”editingButton),当它打开时(在被推到navigationController的堆栈之后) )。

在“7”之前的iOS版本中,仅仅插入例如,这是一个直接的问题。在将选择器推入导航堆栈之前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 个答案:

答案 0 :(得分:10)

您可以使用ABNewPerson ViewController而不是A Person ViewController,下面是代码:

ABNewPersonViewController *picker = [[[ABNewPersonViewController alloc] init] autorelease];
picker.newPersonViewDelegate = self;
picker.displayedPerson = person;
picker.navigationItem.title=@"edit contact";

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