Pav*_*kyy 9 email iphone ios swift mfmailcomposeviewcontroller
我正试图MFMailComposeViewController在我的应用程序中发送电子邮件的情况下实施.问题是,在呈现MFMailComposeViewController它之后不会被"取消"或"发送"按钮解雇,只需稍微向上滚动即可.
以下是它的介绍:
func mailButtonDidPressed {
let emailTitle = "Test email"
let messageBody = "some body bla bla bla"
let toRecipents = "email@gmail.com"
let emailComposer = MFMailComposeViewController()
emailComposer.setSubject(emailTitle)
emailComposer.setMessageBody(messageBody, isHTML: false)
emailComposer.setToRecipients([toRecipents])
emailComposer.mailComposeDelegate = self
self.presentViewController(emailComposer, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
并解雇委托代码:
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
switch (result) {
case MFMailComposeResultSent:
print("You sent the email.")
break
case MFMailComposeResultSaved:
print("You saved a draft of this email")
break
case MFMailComposeResultCancelled:
print("You cancelled sending this email.")
break
case MFMailComposeResultFailed:
print("Mail failed: An error occurred when trying to compose this email")
break
default:
print("An error occurred when trying to compose this email")
break
}
controller.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
我浏览了StackOverflow和其他类似的服务,但找不到任何答案.
请记住添加两个代表:
emailComposer.mailComposeDelegate = self
emailComposer.delegate = self
Run Code Online (Sandbox Code Playgroud)
如果你只添加一个,它不会关闭。还要确保实现委托方法:
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
dismiss(animated: true)
}
Run Code Online (Sandbox Code Playgroud)
如果有人在Swift 3.0中遇到此问题,我认为MFMailComposeViewController可能有两种方法看起来与CORRECT方法类似。
确保您正在使用此方法
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
对于快速3,您必须添加
composer.mailComposeDelegate = self as MFMailComposeViewControllerDelegate
Run Code Online (Sandbox Code Playgroud)
我以这种方式解决了以这种方式删除的写作completion:
extension UIViewController: MFMailComposeViewControllerDelegate {
func sendEmail() {
//send email
}
public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
假设mailComposeControllermailComposeController是 与 同一类的函数mailButtonDidPressedmailButtonDidPressed,应该是它的实例关闭 MFMailComposeViewController,所以
self.dismissViewControllerAnimated(true, completion: nil)
代替
controller.dismissViewControllerAnimated(true, completion: nil)
| 归档时间: |
|
| 查看次数: |
2255 次 |
| 最近记录: |