IOS ContactUI在编辑后导航回应用程序

时间:2017-09-15 15:44:49

标签: ios xamarin.ios

在我的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后,我来到详细信息视图:

enter image description here

正如您所看到的,第二个问题是没有后退按钮。所以回到我的应用程序的唯一方法是杀死应用程序并重新开始。 保存联系人后,有没有办法直接导航回我的应用程序?或者将ContactUI包装在我当前的ViewController中,以便TabBar在下面仍然可见?

1 个答案:

答案 0 :(得分:1)

实现CNContactViewControllerDelegate并使用CNContactViewController的DidComplete委托。单击“完成”按钮将触发DidComplete

  1. 设置代理:

    var view = CNContactViewController.FromNewContact(contact);
    view.Delegate = new MyCNConatactViewControllerDelegate();
    
  2. 实现DidComplete,并在此处关闭包含CNContactViewController的NavigationController:

    public class MyCNConatactViewControllerDelegate : CNContactViewControllerDelegate
    {
    
        public override void DidComplete(CNContactViewController viewController, CNContact contact)
        {
            viewController.NavigationController.DismissViewController(true, null);
        }
    
    }