首页 > 代码库 > 【学习ios之路:UI系列】实现打电话,发短信,发邮件功能

【学习ios之路:UI系列】实现打电话,发短信,发邮件功能

①发短信

1.创建Button ,添加button的响应事件

  UIButton *callButton = [UIButton buttonWithType:UIButtonTypeCustom];
  callButton.frame = CGRectMake(80, 150, 80, 80);
  callButton.backgroundColor = [UIColor cyanColor];
  [callButton setTitle:@"短信" forState:UIControlStateNormal];
  [callButton addTarget:self action:@selector(callButtonAction:)                                        forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:callButton];
2.发短信操作,设置代理MFMessageComposeViewControllerDelegate

- (void)callButtonAction:(UIButton *)msg2
{
    // 判断用户设备能否发送短信
    if (![MFMessageComposeViewController canSendText]) {
        return;
    }
    
    // 1. 实例化一个控制器
    MFMessageComposeViewController *controller =                                     [[MFMessageComposeViewController alloc] init];
    // 2. 设置短信内容
    // 1) 收件人
    controller.recipients = @[@"10010", @"10086"];
    
    // 2) 短信内容
    controller.body = @"快乐!";
    
    // 3) 设置代理
    controller.messageComposeDelegate = self;
    
    // 3. 显示短信控制器
    [self presentViewController:controller animated:YES completion:nil];
}
3.实现代理方法

/**
 短信发送结果
 MessageComposeResultCancelled,     取消
 MessageComposeResultSent,          发送
 MessageComposeResultFailed         失败
 */
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller                                    didFinishWithResult:(MessageComposeResult)result
{
    NSLog(@"%d", result);
    
    // 在面向对象程序开发中,有一个原则,谁申请,谁释放!
    // *** 此方法也可以正常工作,因为系统会将关闭消息发送给self
    //    [controller dismissViewControllerAnimated:YES completion:nil];
    
    // 应该用这个!
    [self dismissViewControllerAnimated:YES completion:nil];
}
②发邮件

1.创建button(如上),设置button触发事件,emailButtonAction:实现方法

<span style="color:#000000;">- (void)emailButtonAction:(UIButton *)sendmail {
    // 1. 先判断能否发送邮件
    if (![MFMailComposeViewController canSendMail]) {
        // 提示用户设置邮箱
        
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil                    message:@"用户没有设置邮件账户" delegate:self cancelButtonTitle:nil                                         otherButtonTitles:@"确定", nil];
        [alert show];
        [alert release]; 
        return;
    }
    
    // 2. 实例化邮件控制器,准备发送邮件
 MFMailComposeViewController *controller =[[MFMailComposeViewController alloc] init];
    
    // 1) 主题 xxx的工作报告
    [controller setSubject:@"项目答辩"];
    // 2) 收件人
    [controller setToRecipients:@[@"123456@gmail.com"]];
    
    // 5) 正文
    [controller setMessageBody:@"是大法官" isHTML:YES];
    
    // 6) 附件
    UIImage *image = [UIImage imageNamed:@"头像1.png"];
    NSData *imageData = UIImagePNGRepresentation(image);
 
    // 1> 附件的二进制数据
    // 3> 收件人接收时看到的文件名称
    // 可以添加多个附件
    [controller addAttachmentData:imageData                                  mimeType:@"image/png" fileName:@"头像.png"];
    
    // 7) 设置代理
    [controller setMailComposeDelegate:self];
    
    // 显示控制器
    [self presentViewController:controller animated:YES completion:nil];
}</span>
2.实现代理方法( MFMailComposeViewControllerDelegate)

- (void)mailComposeController:(MFMailComposeViewController *)controller                didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    // 根据不同状态提示用户
    NSLog(@"%d", result);
    
    [self dismissViewControllerAnimated:YES completion:nil];
}
③打电话

1.方法1

- (void)tel2
{
    // 但是:telprompt协议属于苹果的私有协议,一旦程序中使用了此协议,程序无法上架
    // 针对越狱的机器开发的系统,可以使用此协议
    NSURL *url = [NSURL URLWithString:@"telprompt://10010"];
    
    [[UIApplication sharedApplication] openURL:url];
}
2.方法2 (推荐)

@property (nonatomic, retain) UIWebView *webView;
实现响应事件

- (void)phoneButtonAction:(UIButton *)tel3
{
    // 提示:不要将webView添加到self.view,如果添加会遮挡原有的视图
    // 懒加载
    if (_webView == nil) {
        _webView = [[UIWebView alloc] init];
    }
    NSLog(@"%p", _webView);
    
    //    _webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    //    [self.view addSubview:_webView];
    
    NSURL *url = [NSURL URLWithString:@"tel://10010"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //UIWebView *view = [[UIWebView ]
    [_webView loadRequest:request];
    
}
3. 这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示.
 
NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",
                       @"186xxxx6979"];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];






【学习ios之路:UI系列】实现打电话,发短信,发邮件功能