2017-09-19 2 views
0

en essayant d'envoyer un e-mail en appelant la méthode ci-dessous mais je continue à obtenir et le formulaire e-mail ios n'est pas affiché.Impossible d'envoyer un e-mail à l'aide de la mise en œuvre xamarin ios

"Tentative de présenter MFMailComposeViewController: 0x1560e1a00 sur Xamarin_Forms_Platform_iOS_PlatformRenderer: 0x157b5c180 dont la vue est pas dans la hiérarchie de la fenêtre!"

Des idées de ce que je dois faire pour que ça marche?

 public void SendEmail() 
    { 
      string to="[email protected]"; 
      string subject="Test"; 
      string body="This is a test email"; 

      if (MFMailComposeViewController.CanSendMail) 
      { 
       var mailComposeViewController = new MFMailComposeViewController(); 

       mailComposeViewController.SetToRecipients(new[] { to }); 
       mailComposeViewController.SetSubject(subject); 
       mailComposeViewController.SetMessageBody(body, false); 

       mailComposeViewController.Finished += (s, args) => 
       { 
        Xamarin.Forms.Device.BeginInvokeOnMainThread 
        (
         () => { args.Controller.DismissViewController(true, null); } 
        ); 
       }; 

       UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(mailComposeViewController, true, null); 
      }   
    } 
+0

Dans quel contexte vous définissez 'SendEmail'? (Un moteur de rendu ou un service de dépendance de formulaires personnalisés?) – SushiHangover

+0

Je viens d'avoir une interface qui est implémentée dans le projet iOS avec une méthode send email.je suis ouvert à d'autres suggestions – developer9969

+1

se référer à cette solution https://stackoverflow.com/questions/24136464/access-viewcontroller-in-dependencyservice-à-présenter-mfmailcomposeviewcontrolle –

Répondre

0

Nous devrions trouver le bon rootviewController en haut de la fenêtre.

Essayez ceci:

var rootController = ((AppDelegate)(UIApplication.SharedApplication.Delegate)).Window.RootViewController.ChildViewControllers[0].ChildViewControllers[1].ChildViewControllers[0]; 

Et modifiez votre dernière ligne de code à

var rootController = ((AppDelegate)(UIApplication.SharedApplication.Delegate)).Window.RootViewController.ChildViewControllers[0].ChildViewControllers[1].ChildViewControllers[0]; 
var navcontroller = rootController as UINavigationController; 
if (navcontroller != null) 
    rootController = navcontroller.VisibleViewController; 
rootController.PresentViewController (controller, true, null);