在联系人保存联系人之前如何查看是否添加组织名称?

我正在研究AddressBook项目,我的要求之一是在使用我的应用程序手动添加新联系人时,应检查“组织字段”值是否由用户input。

我在导航栏上用下面的代码片段添加(+)button:

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

当前的模式视图出现在单击此添加button时,通过本机地址簿;

 -(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。

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

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

有了这个我能够向用户显示一个警报提供字段值。 它也正在更新随后创build的logging。 但是,当MODAL VIEW被解雇时,详细视图(本地应用程序的信息屏幕)没有显示关于联系人的信息。

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

任何人都可以指导我!

感谢和问候

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

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

在委托方法中

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

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

 [self dismissModalViewControllerAnimated:YES]; 

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

然后,用户可以:

  • 编译公司字段 – >点击保存将更新保存的人,并给你的委托新的数据,所以你可以closuresviewcontroller正确
  • 点击取消 – >您将收到取消,并且该人将被ABNewPersonViewController本身删除

但是…因为我找不到任何地方logging的这种行为,我不确定是否

  • 它将在其他版本上工作
  • 它将“生存”到审查过程(以前您没有使用私有API,但不确定当用户点击保存时“不closures”视图控制器对于UI准则是不利的)

问候法比奥