• iOS10打电话、发短信、发邮件等小功能


    注意:iOS10.0以后,使用openURL会有延迟,需要使用

    openURL: options: completionHandler:

    一、概要

    本文中主要就是介绍在iOS中实现打电话、发短信、发邮件三个功能。

    每种功能都会给出不同的方法,亲测有效~

    1、打电话

    (1)直接跳到拨号界面,代码如下

    NSURL *url = [NSURL URLWithString:@"tel://10010"];
    [[UIApplication sharedApplication] openURL:url];

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

    (2)拨号之前会弹框询问,打完电话后能自动回到原应用。代码如下:

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

    缺点:私有API,因此可能通不过苹果官方审核。如果是企业级应用(不需要上线appStore),可以使用这个方法。

    (3)创建一个UIWebView来加载URL,拨完后能自动回到原应用。代码如下:

    UIWebView *webView = [[UIWebView alloc]init];
    NSURL *url = [NSURL URLWithString:@"tel://10010"];
    [webView loadRequest:[NSURLRequest requestWithURL:url ]];

    推荐使用:

    + (void)callPhoneWithNumber:(NSString *)telephoneNumber
    {
        if (telephoneNumber.length == 0) {
            return;
        }
        NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", telephoneNumber];
        CGFloat version = [[[UIDevice currentDevice]systemVersion]floatValue];
        if (version >= 10.0) {
            /// 大于等于10.0系统使用此openURL方法
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
        } else {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
        }
    }

    听说但没有验证:

    iOS10.2之前,那个是否确定拨打电话的提示框需要自己添加展示;iOS10.2以后,系统自动添加展示。

    2、发短信

    (1)直接跳转到发短信界面。代码:

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

    缺点:不能定义发送短信的内容,且发完短信后不能自动回到原应用。

    (2)使用MessageUI 框架发送短信,需要包含头文件 #import <MessageUI/MessageUI.h>,代码如下:

    MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc]init];
    //设置短信内容
    vc.body = @"吃饭了没";
    //设置收件人列表
    vc.recipients = @[@"10010",@"10086"];
    //设置代理
    vc.messageComposeDelegate = self;
    //显示控制器
    [self presentViewController:vc animated:YES completion:nil];

    另外实现代理函数

    /**
     *  点击取消按钮会自动调用
     */
    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
    {
        [controller dismissViewControllerAnimated:YES completion:nil];
    }

    3、发邮件

    (1)用自带的邮件客户端,代码如下:

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

    缺点:发完邮件后不会自动回到原应用。

    (2)类似于发短信的第二种方法,使用MessageUI,代码如下:

    if(![MFMailComposeViewController canSendMail]) return;
    MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init];
    //设置邮件主题
    [vc setSubject:@"测试会议"];
    //设置邮件内容
    [vc setMessageBody:@"开会" isHTML:NO];
    //设置收件人列表
    [vc setToRecipients:@[@"test@qq.com"]];
    //设置抄送人列表
    [vc setCcRecipients:@[@"test1@qq.com"]];
    //设置代理
    vc.mailComposeDelegate = self;
    //显示控制器
    [self presentViewController:vc animated:YES completion:nil];

    实现代理方法:

    - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
    {
        [controller dismissViewControllerAnimated:YES completion:nil];
    }
  • 相关阅读:
    mysql通过一张表更新另一张表
    申请微信支付填错对公账号的解决办法
    radio 实现点击两次 第一次点击选中第二次点击取消
    C#修改下拉框选项的高度
    Centos7 用yum命令安装LAMP环境(php+Apache+Mysql)以及php扩展
    php备份数据库
    windows环境下 composer 的安装与使用
    PHP获取多维数据的交集与差集
    JS 图片懒加载
    搭建 window + nginx + php 开发环境
  • 原文地址:https://www.cnblogs.com/cchHers/p/8709740.html
Copyright © 2020-2023  润新知