按下ABNewPersonViewController时出现问题

时间:2016-03-01 12:25:17

标签: ios objective-c abaddressbook addressbookui

我正在使用AddressBookUI Framework添加联系人,当我尝试推送此视图控制器然后取消并完成按钮无法正常工作时,我不想呈现它

这是我的代码

ABNewPersonViewController *abnpvc = [[ABNewPersonViewController alloc] init];
[abnpvc setNewPersonViewDelegate: self];
[self.navigationController pushViewController:abnpvc animated:YES];

我也尝试添加为子视图而不是推送它但是当我添加为子视图时它没有被添加

根据评论,我尝试了

UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:abnpvc];
[self presentViewController:navigation animated:YES completion:nil];

任何人都可以帮我解释为什么不能正常工作?

3 个答案:

答案 0 :(得分:2)

您也可以考虑其他答案以及iOS 9中ABNewPersonViewController的弃用。

根据你的评论:

  

取消并完成按钮无法正常工作

如果您在界面中包含ABNewPersonViewControllerDelegate,则它们正在运行:

@interface ViewController () <ABNewPersonViewControllerDelegate>

将viewController推送到导航堆栈上,如下所示:

ABNewPersonViewController *controller = [[ABNewPersonViewController alloc] init];
controller.newPersonViewDelegate = self;
[self.navigationController pushViewController:controller animated:YES];

通过实施此方法符合协议:

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(nullable ABRecordRef)person {
    // Trick to go back to your view by popping it from the navigation stack when done or cancel button is pressed
    [self.navigationController popViewControllerAnimated:YES];
}

当按下完成取消按钮时,棘手的问题是从导航堆栈中弹出newPersonController。

享受它

答案 1 :(得分:1)

为什么你不能像the docs那样说呢?

  

建议您以模态方式呈现新人视图控制器。

使用

ABNewPersonViewController *abnpvc = [[ABNewPersonViewController alloc] init];
[abnpvc setNewPersonViewDelegate: self];
[self presentViewController:abnpvc animated:YES completion:nil];

这应该可以正常工作。

修改

第二个想法,你是否正确设置了你的委托并且调用了实现?我怀疑它们没有实现或代理设置不正确。

答案 2 :(得分:1)

Apple指南(重要)::新人视图控制器必须与导航控制器一起使用才能正常运行。建议您以模态方式呈现新人视图控制器。

添加代表

@interface ViewController () <ABNewPersonViewControllerDelegate>

推送viewController

ABNewPersonViewController *abnpvc = [[ABNewPersonViewController alloc] init];
[abnpvc setNewPersonViewDelegate: self];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:abnpvc];
[self presentModalViewController:navController animated:YES];

现在添加委托方法

#pragma mark ABNewPersonViewControllerDelegate methods

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person
{
    [self dismissViewControllerAnimated:YES completion:NULL];
}

这样可以正常工作。