2017-09-15 5 views
0

Dans mon application Xamarin IOS j'ouvre le ContactUI avec le code suivant:IOS ContactUI Retournez à l'application après modification

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

Je l'envelopper dans un INavigationController car sans elle ne se charge pas. Le message suivant est imprimé sur la sortie:

[CNUI ERROR] Contact view delayed appearance timed out 

La boîte de dialogue Modifier s'affiche correctement. Mais après que je clique sur Enregistrer, je viens la vue détaillée:

Comme vous pouvez le voir

enter image description here

est le deuxième problème, qu'il n'y a pas de bouton de retour. La seule façon de revenir à mon application est de tuer l'application et de recommencer. Existe-t-il un moyen de revenir directement à mon application après avoir enregistré le contact? Ou pour envelopper le ContactUI dans mon ViewController actuel afin que le TabBar soit toujours visible ci-dessous?

Répondre

1

Implémentez le CNContactViewControllerDelegate et utilisez le délégué DidComplete de CNContactViewController. DidComplete sera déclenché lorsque le bouton "Terminé" est cliqué.

  1. Définir le délégué:

    var view = CNContactViewController.FromNewContact(contact); 
    view.Delegate = new MyCNConatactViewControllerDelegate(); 
    
  2. Mettre en oeuvre la DidComplete et de rejeter le NavigationController qui contient votre CNContactViewController ici:

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