2

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

我的导航栏上有 Add(+) 按钮,其中包含以下代码片段:

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];
}

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

编辑:正如法比奥在下面建议的那样,我更新了我的代码..

- (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 的信息屏幕)不会显示有关联系人的信息。

此外,取消按钮不能以常规方式工作..我无法返回应用程序,因为它反复要求提供字段值,即使我提供并按下取消也是如此。

谁能指导我!

感谢和问候

4

1 回答 1

1

没有使用 ABNewPersonViewController 执行此操作的文档化方法,因为当调用委托方法时,此人已由 ABNewPersonViewController 保存。以前您应该制作自己的“插入控制器”并使用它。

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

在委托方法中

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

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

[self dismissModalViewControllerAnimated:YES];

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

然后,用户可以:

  • 编译公司字段->点击保存将更新保存的人并为您的委托提供新数据,因此您可以正确关闭视图控制器
  • 点击取消 --> 您收到取消,此人被 ABNewPersonViewController 本身删除

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

  • 它适用于其他版本
  • 它将“幸存”到审查过程(以前您没有使用私有 API,但不确定当用户点击保存时“不关闭”视图控制器是否对 UI 指南不利)

问候法比奥

于 2012-10-31T11:12:46.593 回答