2

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

这是我的代码

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

谁能帮我解决为什么不能正常工作?

4

3 回答 3

2

您也可以考虑ABNewPersonViewControlleriOS 9 中的其他答案和弃用情况来实现这一点。

根据你的言论:

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

如果您包含这样的ABNewPersonViewControllerDelegateon 界面,它们正在工作:

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

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

好好享受

于 2016-03-01T12:49:41.130 回答
1

为什么你不能像文档说的那样做呢?

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

采用

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

那应该可以正常工作。

编辑

再想一想,您是否正确设置了您的委托并调用了实现?我怀疑它们没有实现或委托设置不正确。

于 2016-03-01T12:35:14.200 回答
1

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

添加代表

@interface ViewController () <ABNewPersonViewControllerDelegate>

推送视图控制器

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

那会很好用。

于 2016-03-01T12:38:38.587 回答