推送 ABNewPersonViewController 时出现问题
Issue while pushing ABNewPersonViewController
我正在使用 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];
谁能帮我解决为什么不能正常工作?
为什么你不能照the docs说的去做?
It is recommended that you present a new-person view controller modally.
使用
ABNewPersonViewController *abnpvc = [[ABNewPersonViewController alloc] init];
[abnpvc setNewPersonViewDelegate: self];
[self presentViewController:abnpvc animated:YES completion:nil];
那应该没问题。
编辑
转念一想,您是否正确设置了委托并调用了实现?我怀疑它们没有实现或委托设置不正确。
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];
}
那会很好。
考虑到 iOS 9 中对 ABNewPersonViewController
的其他答案和弃用,您也可以实现它。
根据您的评论:
cancel and done button not working properly
如果您像这样在界面上包含 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];
}
棘手的行是在按下 Done 或 Cancel 按钮时从导航堆栈中弹出 newPersonController。
尽情享受
我正在使用 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];
谁能帮我解决为什么不能正常工作?
为什么你不能照the docs说的去做?
It is recommended that you present a new-person view controller modally.
使用
ABNewPersonViewController *abnpvc = [[ABNewPersonViewController alloc] init];
[abnpvc setNewPersonViewDelegate: self];
[self presentViewController:abnpvc animated:YES completion:nil];
那应该没问题。
编辑
转念一想,您是否正确设置了委托并调用了实现?我怀疑它们没有实现或委托设置不正确。
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];
}
那会很好。
考虑到 iOS 9 中对 ABNewPersonViewController
的其他答案和弃用,您也可以实现它。
根据您的评论:
cancel and done button not working properly
如果您像这样在界面上包含 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];
}
棘手的行是在按下 Done 或 Cancel 按钮时从导航堆栈中弹出 newPersonController。
尽情享受