• iOS中多种方式实现打电话、发短信、写邮件


    一、打电话

    打电话--方法1

        NSURL *URL = [NSURL URLWithString:@"tel://10010"];
        [[UIApplication sharedApplication] openURL:URL];
    优点:最简单最直接的方式----->直接跳转到拨号界面

    缺点:电话打完后,不能自动回到原应用,会停留在通话记录界面。


    打电话--方法2

    NSURL *URL = [NSURL URLWithString:@"telprompt://10010"];
    [[UIApplication sharedApplication] openURL:URL];

    优点:拨号后能弹框询问是否拨号,电话打完后能自动回到原应用。

    缺点:私有API,审核可能不会通过。


    打电话--方法3

        if (_webView == nil) {
            _webView = [[UIWebView alloc] initWithFrame:CGRectZero];
        }
        
        [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://10010"]]];

    优点:拨号后能弹框询问是否拨号,电话打完后能自动回到原应用。

    缺点:暂无。

    注意:webView不能添加到视图上,不然会挡住其他控件。


    二、发短信
    发短信--方法1

        NSURL *URL = [NSURL URLWithString:@"sms://10010"];
        [[UIApplication sharedApplication] openURL:URL];

    优点:简单直接--->直接跳转到发短信界面。

    缺点:不能指定短信内容,不能直接回到原应用。


    发短信--方法2

    若想指定发短信的内容,则可以使用MessageUI框架

    先在项目中导入MessageUI.framework框架

    然后在控制器中

    #import <MessageUI/MessageUI.h>

    并添加代理

    MFMessageComposeViewControllerDelegate


    判断能否发短信 [MFMessageComposeViewControllercanSendText],还可以判断能否发附件,发主题。

        MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
        messageVC.body = @"你在干嘛呢?";
        messageVC.recipients = @[@"10010",@"10086"];
        messageVC.messageComposeDelegate = self;
        
        [self presentViewController:messageVC animated:YES completion:nil];
    其中在IOS7之后 MFMessageComposeViewController 又添加了一些新的属性,包括附件等。

    代理方法是在短信界面关闭的时候调用,发完后会自动回到原应用。

    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
    {
        //关闭短信控制器
        [controller dismissViewControllerAnimated:YES completion:nil];
        
        if (result == MessageComposeResultCancelled) {
            NSLog(@"取消发送");
        } else if (result == MessageComposeResultSent) {
            NSLog(@"发送成功");
        } else {
            NSLog(@"发送失败");
        }
        
    }

    优点:可以指定短信内容,且发送完毕后能直接回到原应用

    缺点:实现过程比方法稍微复杂一丢丢。


    三、发邮件

    发邮件--方法1

        NSURL *URL = [NSURL URLWithString:@"mailto://10010@qq.com"];
        [[UIApplication sharedApplication] openURL:URL];

    优点:简单直接--->直接跳转到发邮件界面。

    缺点:不能指定邮件内容,不能直接回到原应用。


    发邮件--方法2

    类似发短信的方法2,控制器名字为 MFMailComposeViewController
    该控制器同样在 MessageUI框架中,使用方式发短信的方法2

    判断能否发邮件 [MFMailComposeViewControllercanSendMail]

    先在控制器中导入 #import <MessageUI/MessageUI.h> ,然后添加代理   MFMailComposeViewControllerDelegate

        MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
        [mailVC setToRecipients:@[@"10011@qq.com",@"10012@qq.com"]]; //设置接收人
        [mailVC setCcRecipients:@[@"10021@qq.com",@"10022@qq.com"]]; //设置抄送人
        [mailVC setBccRecipients:@[@"10031@qq.com",@"10032@qq.com"]]; //设置密送人
        [mailVC setMessageBody:@"发点什么呢?" isHTML:NO];
        mailVC.mailComposeDelegate = self;
        
        [self presentViewController:mailVC animated:YES completion:nil];
    关闭邮件界面是在代理方法中实现,所以必须实现代理方法

    - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
    {
        [controller  dismissViewControllerAnimated:YES completion:nil];
        
        if (result == MFMailComposeResultCancelled) {
            NSLog(@"取消发送");
        } else if (result == MFMailComposeResultSent) {
            NSLog(@"发送成功");
        } else if (result == MFMailComposeResultSaved) {
            NSLog(@"保存成功");
        } else {
            NSLog(@"发送失败");
        }
    }

    优点:可以指定邮件内容,可以指定抄送、密送接收人,且发送完毕后能直接回到原应用

    缺点:实现过程比方法稍微复杂一丢丢。

    注意:必须实现代理方法,且在代理方法中关闭邮件控制器。当多个接收人有重复时,会自动去掉重复的。

    如果想打开一些常见文件,如 html、txt、pdf、ppt 等,可以用UIWebView来打开。

    只需要给UIWebView传一个URL地址就可以了。



  • 相关阅读:
    【Javascript】javascript学习 二十二 JavaScript 对象简介
    【Javascript】javascript学习 二十六 JavaScript Boolean(逻辑)对象
    【Javascript】javascript学习 二十九 JavaScript HTML DOM 对象
    【Javascript】javascript学习 二十八 JavaScript RegExp 对象
    【Javascript】javascript学习 二十一 JavaScript 指导方针
    【Javascript】javascript学习 二十三 JavaScript 字符串(String)对象
    【Javascript】javascript学习 三十 JavaScript 浏览器检测
    【Javascript】javascript学习 二十五 JavaScript Array(数组)对象
    【Javascript】javascript学习 二十四 JavaScript Date(日期)对象
    【Javascript】javascript学习 二十七 JavaScript Math(算数)对象
  • 原文地址:https://www.cnblogs.com/wanghang/p/6298882.html
Copyright © 2020-2023  润新知