
·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> iOS-----MFMessageCompose和MFMailComposeViewController的使用方法
应用想自己提供界面让用户输入短信收件人地址、短信内容、主体、附件等短信内容,则可使用MFMessageComposeViewController来发送短信,它也是一个视图控制器,继承UINavigationController.
MFMessageComposeViewController提供了如下类方法判断iOS设备是否支持发送短信.
|
+ canSendText: |
该iOS设备是否支持发送文本短信. |
|
|
+ canSendAttachments: |
该iOS设备是否支持发送带附件的短信 |
|
|
+ canSendSubject: |
该iOS设备是否支持发送带标题的短信 |
|
|
程序使用MFMessageComposeViewController的类方法进行判断之后,接下来就可按如下步骤发送短信. |
||
|
1 |
创建MFMessageComposeViewController对象 |
|
|
2 |
为MFMessageComposeViewController设置recipients(接受NSArray作为属性值,用于设置多个收件人号码)、subject(设置短信主题)、body(设置短信内容)、attachments(接受NSArray作为属性值,用于设置多个附件)等属性 |
|
|
3 |
为MFMessageComposeViewController设置messageComposeDelegate,该属性值必须是一个实现MFMessageComposeViewControllerDelegate协议的对象.该协议中定义了一个必须实现的messageComposeViewComtroller:didFinishWithResult:方法,该方法负责处理短信的发送结果. |
|
|
代 码 片 段 |
1 @interface LCViewController()<MFMessageComposeViewControllerDelegate>
2
3 @end
4
5 @implementation LCViewController
6
7 - (void)viewDidLoad
8
9 {
10
11 [super viewDidLoad];
12
13 }
14
15 - (IBAction)send:(id)sender
16
17 {
18
19 NSString* destStr = self.destField.text;
20
21 NSString* contentStr = self.contentField.text;
22
23 if(destStr != nil && destStr.length>0 && contentStr != nil && destStr.length > 0 )
24
25 {
26
27 // 如果能发送文本信息
28
29 if([MFMessageComposeViewController canSendText])
30
31 {
32
33 // 创建MFMessageComposeViewController对象
34
35 MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
36
37 // 为MFMessageComposeViewController对象指定messageComposeDelegate
38
39 picker.messageComposeDelegate = self;
40
41 picker.navigationBar.tintColor = [UIColor blackColor];
42
43 // 设置收件人,此处可通过NSArray集合指定多个收件人
44
45 picker.recipients = [NSArray arrayWithObject:destStr];
46
47 // 设置短信内容
48
49 picker.body = contenStr;
50
51 /*
52
53 如果运营商支持,picker还支持指定subjecy(主题)和attachments(附件)
54
55 也可用addAttachmentURL:withAlternateFilename:或addAttachmentData:typeIdentifier:filename:方法添加附件
56
57 */
58
59 // 显示MFMessageComposeViewController控制器
60
61 [self persentViewController:picker animated:YES completion:nil];
62
63 }
64
65 }
66
67 }
68
69 // MFMessageComposeViewControllerDelegate协议中的方法,负责处理短信的发送结果
70
71 - (void)messageComposeViewController:(MFMessageComposeViewController*)controller didFinishWithResult:(MessageComposeResult)result
72
73 {
74
75 switch(result)
76
77 {
78
79 case MessageComposeResultCancelled:
80
81 [self showAlert:@”结果: 短信被取消发送”];
82
83 break;
84
85 case MessageComposeResultSent:
86
87 [self showAlert:@”结果: 发送成功”];
88
89 break;
90
91 case MessageComposeResultFailed:
92
93 [self showAlert:@”结果: 发送失败”];
94
95 break;
96
97 default:
98
99 [self showAlert:@”结果: 没有发送短信”];
100
101 break;
102
103 }
104
105 [self dismissViewControllerAnimated:YES completion:nil];
106
107 }
108
109 - (void)showAlert:(NSString *)msg
110
111 {
112
113 [[[UIAlertView alloc] initWithTitle:@”发送结果” message:msg delegate:nil cancelButtonTitle:@”确 定” otherButtonTitles:nil] show];
114
115 }
116
117 @end
创建了一个MFMessageComposeViewController对象,并为该对象设置了recipents(收件人)、body(短信内容),并将该视图控制器本身设为它的messageComposeDelegate,因此该视图控制器类实现了MFMessageComposeViewControllerDelegate协议,并实现该协议中的方法----该方法负责处理发送短信的结果。 |
|
MFMailComposeViewController与MFMessageComposeViewController的用法非常相似,只是功能不同而已------MFMailComposeViewController用于发送邮件。
MFMailComposeViewController提供了如下类方法判断iOS设备是否支持发送邮件。
+ canSendMail: 该iOS设备是否支持发送邮件.
程序使用MFMailComposeViewController的类方法进行判断之后,接下来就可按如下步骤发送邮件.
|
代 码 片 段 |
1 @interface LCViewController()<MFMailComposeViewControllerDelegate>
2
3 @end
4
5 @implementation LCViewController
6
7 -(void)viewDidLoad
8
9 {
10
11 [super viewDidLoad];
12
13 }
14
15 -(IBAction)sendMail:(id)sender
16
17 {
18
19 // 获取界面上用户输入的内容
20
21 NSString* toStr = self.toField.text;// 收件人地址
22
23 NSString* ccStr = self.ccField.text;// 抄送人地址
24
25 NSString* bccStr = self.bccField.text;// 密送人地址
26
27 NSString* subjectStr = self.subjectField.text;// 邮件主题
28
29 NSString* contentStr = self.contentField.text;// 邮件正文
30
31 if(toStr != nil && toStr.length > 0
32
33 && subjectStr != nil && subjectStr.length > 0
34
35 && contentStr != nil && contentStr.length > 0)
36
37 {
38
39 // 如果能发送邮件
40
41 if([MFMailComposeViewController canSendMail])
42
43 {
44
45 // 创建MFMailComposeViewController对象
46
47 MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
48
49 // 为 MFMailComposeViewController对象指定mailComposeDelegate
50
51 picker.mailComposeDelegate = self;
52
53 picker.navigationBar.tintColor = [UIColor blackColor];
54
55 // 设置收件人,此处可通过NSArray集合指定多个收件人
56
57 picker.toRecipients = [NSArray arrayWithObject:toStr];
58
59 if(ccStr != nil && ccStr.length > 0)
60
61 {
62
63 // 设置抄送人,此处可通过NSArray集合指定多个抄送人
64
65 picker.ccRecipients = [NSArray arrayWithObject:ccStr];
66
67 }
68
69 if(bccStr != nil && bccStr.length > 0)
70
71 {
72
73 // 设置密送人,此处可用过NSArray集合指定多个密送人
74
75 picker.bccRecipients = [NSArray arrayWithObject:bccStr];
76
77 }
78
79 // 设置邮件主题
80
81 picker.subject = subjectStr;
82
83 // 设置邮件正文
84
85 [picker setMessageBody:contentStr isHTML:NO];
86
87 // 显示MFMailComposeViewController控制器
88
89 [self persentViewController:picker animated:YES completion:nil];
90
91 }
92
93 }
94
95 }
96
97 -(IBAction)finishEdit:(id)sender
98
99 {
100
101 [sender resignFirstResponder];
102
103 }
104
105 -(void)mailComposeController:(MFMailComposeViewController*)controller
106
107 didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
108
109 {
110
111 switch(result)
112
113 {
114
115 case MFMailComposeResultCancelled:
116
117 [self showAlert:@”结果: 邮件被取消发送”];
118
119 break;
120
121 case MFMailComposeResultSent:
122
123 [self showAlert:@”结果: 发送成功”];
124
125 break;
126
127 case MFMailComposeResultFailed:
128
129 [self showAlert:@”结果: 发送失败”];
130
131 break;
132
133 case MFMailComposeResultSaved:
134
135 [self showAlert:@”结果: 邮件被保存了”];
136
137 break;
138
139 }
140
141 [self dismissViewControllerAnimated:YES completion:nil];
142
143 }
144
145 -(void)showAlert:(NSString *)msg
146
147 {
148
149 [ [ [ UIAlertView alloc] initWithTitle:@”发送结果” message:msg delegate:nil cancelButtonTitle:@”确定” otherButtonTitles:nil] show];
150
151 }
152
153 @end
// 上面程序中的粗体字代码创建了一个MFMailComposeViewController对象,并为该对象设置了toRecipients(收件人地址)、ccRecipients(抄送人地址)、bccRecipients(密送人地址),还调用了setMessageBody:contentStr isHTML:方法设置邮件正文,并将该视图控制器本身设为它的mailComposeDelegate,因此该视图控制器类实现MFMailComposeViewControllerDelegate协议,并实现了该协议中的方法----该方法负责处理发送邮件的结果。 // 编译、运行该程序(必须在真机中运行,模拟器不支持),在程序界面中输入收件人地址、抄送地址、密送人地址、邮件主题、邮件正文,然后单击“发送”按钮,将可以看到如下图所示的界面 |