在我的Xamarin IOS应用程序中,我使用以下代码打开ContactUI:
var contact = new AddressBookService().GetCNContactById(addressbookId);
var view = CNContactViewController.FromNewContact(contact);
view.Editing = true;
// Display the view
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
{
vc = vc.PresentedViewController;
}
var navController = vc as UINavigationController;
if (navController != null)
{
vc = navController.ViewControllers.Last();
}
vc.PresentViewController(new UINavigationController(view), true, null);
我将它包装在INavigationController
中,因为没有它将无法加载。输出中打印了以下消息:
[CNUI ERROR] Contact view delayed appearance timed out
正确显示编辑对话框。但在我点击Save后,我来到详细信息视图:
正如您所看到的,第二个问题是没有后退按钮。所以回到我的应用程序的唯一方法是杀死应用程序并重新开始。
保存联系人后,有没有办法直接导航回我的应用程序?或者将ContactUI包装在我当前的ViewController中,以便TabBar
在下面仍然可见?
答案 0 :(得分:1)
实现CNContactViewControllerDelegate
并使用CNContactViewController的DidComplete
委托。单击“完成”按钮将触发DidComplete
。
设置代理:
var view = CNContactViewController.FromNewContact(contact);
view.Delegate = new MyCNConatactViewControllerDelegate();
实现DidComplete
,并在此处关闭包含CNContactViewController的NavigationController:
public class MyCNConatactViewControllerDelegate : CNContactViewControllerDelegate
{
public override void DidComplete(CNContactViewController viewController, CNContact contact)
{
viewController.NavigationController.DismissViewController(true, null);
}
}