Ale*_*mov 29 objective-c uiviewcontroller mfmailcomposer swift ios8
这是示例代码:
import UIKit
import MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
@IBAction func showEmail(sender : AnyObject) {
var emailTitle = "Test Email"
var messageBody = "This is a test email body"
var toRecipents = ["a.nakhimov@gmail.com"]
var mc: MFMailComposeViewController = MFMailComposeViewController()
mc.mailComposeDelegate = self
mc.setSubject(emailTitle)
mc.setMessageBody(messageBody, isHTML: false)
mc.setToRecipients(toRecipents)
self.presentViewController(mc, animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError) {
switch result {
case MFMailComposeResultCancelled:
NSLog("Mail cancelled")
case MFMailComposeResultSaved:
NSLog("Mail saved")
case MFMailComposeResultSent:
NSLog("Mail sent")
case MFMailComposeResultFailed:
NSLog("Mail sent failure: %@", [error.localizedDescription])
default:
break
}
self.dismissViewControllerAnimated(false, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
在函数mailComposeController中,我在每个case表达式上都得到一个错误:
找不到接受提供的参数的重载'〜='.
我究竟做错了什么?
小智 31
我比较MFMailComposeResult了Xcode 5和Xcode 6上的文档.在Swift中,MFMailComposeResult是一个结构
struct MFMailComposeResult {
init(_ value: CUnsignedInt) // available in iPhone 3.0
var value: CUnsignedInt
}
Run Code Online (Sandbox Code Playgroud)
用MFMailComposeResultCancelled类型的一个常数MFMailComposeResult:
var MFMailComposeResultCancelled: MFMailComposeResult { get }
Run Code Online (Sandbox Code Playgroud)
虽然它是Objective-C中的枚举:
enum MFMailComposeResult {
MFMailComposeResultCancelled,
MFMailComposeResultSaved,
MFMailComposeResultSent,
MFMailComposeResultFailed
};
typedef enum MFMailComposeResult MFMailComposeResult; // available in iPhone 3.0
Run Code Online (Sandbox Code Playgroud)
为了使您的代码有效,您必须比较它们的值CUnsignedInt.
所以你必须输入以下代码:
func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError) {
switch result.value {
case MFMailComposeResultCancelled.value:
println("Mail cancelled")
case MFMailComposeResultSaved.value:
println("Mail saved")
case MFMailComposeResultSent.value:
println("Mail sent")
case MFMailComposeResultFailed.value:
println("Mail sent failure: \(error.localizedDescription)")
default:
break
}
self.dismissViewControllerAnimated(false, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
小智 19
在Swift 2.0中执行此操作:
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
switch result.rawValue {
case MFMailComposeResultCancelled.rawValue:
print("Mail cancelled")
case MFMailComposeResultSaved.rawValue:
print("Mail saved")
case MFMailComposeResultSent.rawValue:
print("Mail sent")
case MFMailComposeResultFailed.rawValue:
print("Mail sent failure: \(error!.localizedDescription)")
default:
break
}
controller.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
在swift 3.0中 - >语法更改
func mailComposeController(controller: MFMailComposeViewController,
didFinishWithResult result: MFMailComposeResult, error: NSError?) {
switch result.rawValue {
case MFMailComposeResult.Cancelled.rawValue:
print("Mail cancelled")
case MFMailComposeResult.Saved.rawValue:
print("Mail saved")
case MFMailComposeResult.Sent.rawValue:
print("Mail sent")
case MFMailComposeResult.Failed.rawValue:
print("Mail sent failure: %@", [error!.localizedDescription])
default:
break
}
// Dismiss the mail compose view controller.
controller.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15682 次 |
| 最近记录: |