2016-05-15 30 views
5

发送邮件时,点击发送或取消按钮后视图控制器停留在那里和应用程序停顿。如何在点击发送或取消按钮后关闭邮件视图控制器

// swift 2.2; xcode 7.3.1;

if(MFMailComposeViewController.canSendMail()) { 
      print("Can send email.") 
     } 

     var subjectText = "Verification" 
     var toReceipients = ["[email protected]"] 


     // var msgBody = "Verified" 


     var mc:MFMailComposeViewController = MFMailComposeViewController() 
     mc.mailComposeDelegate = self 

     mc.setSubject(subjectText) 
     mc.setMessageBody("Verified", isHTML: false) 

     mc.setToRecipients(toReceipients) 
     self.presentViewController(mc, animated: true, completion: nil) 



    } 

    func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 



     self.dismissViewControllerAnimated(true, completion: nil) 

    } 
+0

呼叫'dismissViewControllerAnimated'上'controller',不'self'。 – rmaddy

回答

6

我觉得@rmaddy在他的评论中回答你的问题,但我会解释你发生了什么事。您正试图解雇UIViewController,其中显示MFMailComposeViewController而不是MFMailComposeViewController

由于Apple指定他的文件中:

邮件撰写视图控制器不会自动解散。当用户点击按钮发送电子邮件或取消界面时,邮件撰写视图控制器会调用其代理的mailComposeController:didFinishWithResult:error:方法。您的该方法的实现必须明确地关闭视图控制器。

所以你需要设置方法是这样的:

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 

    // Dismiss the mail compose view controller. 
    controller.dismissViewControllerAnimated(true, completion: nil) 
} 

我希望这可以帮助您。

+0

它的工作!谢谢 –

13

Swift 3.0更新。 Swift 4.0更新。

允许我添加一些讨论...

在斯威夫特3和4的委托方法略有改变; 现在由你发布,不会产生任何效果,也不会被调用。它发生在我身上,让我疯狂!

Xcode警告提示三个修正,但前两个可能会引起误解。这只是一个很小的修复...

这里有固定的斯威夫特3和4的委托方法:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 

     // Dismiss the mail compose view controller. 
     controller.dismiss(animated: true, completion: nil) 
    } 

尽管如此,维克多的答案应该是正确的/接受一个。

享受!

+0

看起来不同的是函数声明中的underbar。 –

3

是有控制它,我的switch语句:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 

    switch result.rawValue { 
    case MFMailComposeResult.cancelled.rawValue : 
     print("Cancelled") 

    case MFMailComposeResult.failed.rawValue : 
     print("Failed") 

    case MFMailComposeResult.saved.rawValue : 
     print("Saved") 

    case MFMailComposeResult.sent.rawValue : 
     print("Sent") 



    default: break 


    } 

    self.dismiss(animated: true, completion: nil) 

} 
相关问题