如何在通讯录中保存联系人之前检查是否添加了组织名称?

时间:2012-10-01 07:50:13

标签: iphone ios ios5 addressbook

我正在开发一个AddressBook项目,我的要求之一是在使用我的应用程序手动添加新联系人时,它应该检查用户是否输入了“组织字段”值。

我在导航栏上添加了(+)按钮,其中包含以下代码片段:

UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self 
action:@selector(add:)];
self.navigationItem.rightBarButtonItem = addButton;

按本地地址簿单击此添加按钮时会出现当前模态视图;

-(void)add:(id)sender
{
    ABNewPersonViewController *view = [[ABNewPersonViewController alloc] init];
    view.newPersonViewDelegate = self;
    UINavigationController *newNavigationController = [[UINavigationController alloc] initWithRootViewController:view];
    [self presentModalViewController:newNavigationController animated:YES];
}

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person
{
    newPersonView.displayedPerson = person;
    [self dismissModalViewControllerAnimated:YES];
    [table reloadData];
}

在联系人保存到我的地址簿之前我想检查用户是否添加了“组织字段”。如果是空白/无,我想显示一个警告框,要求填写组织价值。这是强制性的,一旦用户提供了组织值,联系人就会保存到AddressBook。

编辑:正如下面Fabio的建议,我更新了我的代码..

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person{

NSString *company = [NSString stringWithFormat: @"%@", ABRecordCopyValue(person, kABPersonOrganizationProperty)];
if ([company isEqualToString: @"(null)"]) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Value Required!" message:@"Please provide some value for ORGANIZATION Field..." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}
else
{
 newPersonView.displayedPerson = person;
 [self dismissModalViewControllerAnimated:YES];
}
}

通过这个我能够向用户显示警报以提供字段值。它还会更新后续创建的记录。但是,由于MODAL VIEW被解雇,详细视图(Native App的信息屏幕)显示没有关于联系人的信息。

此外,CANCEL按钮不能正常工作..我无法返回应用程序,因为它反复要求提供字段值,即使我提供并按取消。

任何人都可以指导我!

谢谢&此致

1 个答案:

答案 0 :(得分:1)

使用ABNewPersonViewController没有记录的方法,因为当调用委托方法时,ABNewPersonViewController已经保存了该人。 以前你应该自己制作“插入控制器”并使用它。

但是我尝试了这种解决方法并获得了这种行为(在iOS 6上):

在委托方法

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person

您收到了对创建的新人的引用。 然后,您可以访问已保存的人员并检查公司是否已编译。如果没有,只是你不打电话

[self dismissModalViewControllerAnimated:YES];

ABNewPersonViewController将保持原位,您可以向用户显示警告,要求他编译公司。 这些字段将保持编译状态,ABNewPersonViewController“链接”到创建的新用户。

然后,用户可以:

  • 编译公司字段 - >点击“保存”将更新已保存的人并为您的代表提供新数据,以便正确解除视图控制器
  • 点击取消 - >您收到取消,该人将被ABNewPersonViewController本身删除

但是......因为我无法在任何地方找到这种行为,我不确定是否

  • 它适用于其他版本
  • 它将“存活”到审核流程(以前您没有使用私有API,但不确定当用户点击保存时“关闭”视图控制器不适合UI准则)

此致 法比奥