iOS 点击按钮实现拨打电话,发送短信功能

本文介绍了在iOS应用中如何实现点击按钮调用系统拨打电话、发送短信以及发送邮件的功能。提供了多种实现方式,包括直接拨打、弹出提示拨打以及使用MessageUI框架发送自定义短信。对于发送邮件,提到了与发送短信类似的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做通讯录功能时,有需求要点击按钮直接调用系统拨打电话和发送短信的功能,然后上网查了一下,有以下方法:

点击按钮实现拨打电话

  • 方法1:点击按钮后不弹出提示,直接拨打
// 点击按钮拨打电话
- (IBAction)dialPhoneNumber:(UIButton *)sender
{
    NSMutableString *str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
}
  • 方法2(推荐):点击按钮后会弹出提示是否需要拨打,打完电话后会回到原来的程序
// 点击按钮拨打电话
- (IBAction)dialPhoneNumber:(UIButton *)sender
{
    NSMutableString *str=[[NSMutableString alloc] initWithFormat:@"tel:%@",@"186xxxx6979"];
    UIWebView *callWebview = [[UIWebView alloc] init];

    [callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
    [self.view addSubview:callWebview];
}
  • 方法3:效果与2一样,但是网上说这个方法可能不合法 无法通过审核(不知道是不是真的)
    网上说:
    // telprompt协议属于苹果的私有协议,一旦程序中使用了此协议,程序无法上架
    // 针对越狱的机器开发的系统,可以使用此协议
// 点击按钮拨打电话
- (IBAction)dialPhoneNumber:(UIButton *)sender
{
    NSMutableString* str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",_contactInfo.tel];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
}

点击按钮实现发送短信

  • 方法1:跳转到系统短信编辑页面
//点击按钮发送短信
- (IBAction)sendMessage:(UIButton *)sender
{
    NSMutableString *str=[[NSMutableString alloc] initWithFormat:@"sms:%@",@“188xxxx5678”];
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:str]];
}
  • 方法2:同样跳转到系统短信编辑页面:
//点击按钮发送短信
- (IBAction)sendMessage:(UIButton *)sender
{
    NSMutableString *str=[[NSMutableString alloc] initWithFormat:@"sms:%@",@“188xxxx5678”];
    UIWebView *sendMessageWebview = [[UIWebView alloc] init];
    [sendMessageWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];
    [self.view addSubview:sendMessageWebview];
}

然而接下来并没有对应的方法3,用类似的方法的话,会报没有smsprompt://协议的错!

  • 方法3:MessageUI框架(网上看到的,没试过) 
    如果需要自定义短信,需要使用一个框架MessageUI。
    优点:

    1. 从应用出去能返回应用
    2. 可以同时给多人发送消息
    3. 可以自定义消息,消息支持HTML格式的

    而且如果在苹果系统中,如果彼此的手机都是iOS设备,并且开通了iMessage功能,彼此之间的短信是走网络通道,而不走运营商的通道!

- (void)sendMessage{
    //判断用户设备是否可以发送短信
    if(![MFMessageComposeViewController canSendText]) {
        return;
    }

    //1.实例化一个控制器
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    //2.设置短信内容
    controller.recipients = @[@"10086",@"10010"];//手机人
    controller.body = @"短信内容";//短信内容
    controller.messageComposrDelegate = self;//设置代理
    //3.显示短信控制器
    [self presentViewController:controller animated:YES completion:nil];
}

//记得发完短信记得调用代理方法关闭窗口
#pragma mark 短信控制器代理方法
/**
 短信发送结果
 MessageComposeResultCancelled,     取消
 MessageComposeResultSent,          发送
 MessageComposeResultFailed         失败
 */
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
    NSLog(@"%d", result);

    // 在面向对象程序开发中,有一个原则,谁申请,谁释放!
    // 此方法也可以正常工作,因为系统会将关闭消息发送给self
//    [controller dismissViewControllerAnimated:YES completion:nil];

    // 但是根据原则,应该用这个!!!
    [self dismissViewControllerAnimated:YES completion:nil];
}    

点击按钮发送邮件

发送邮件的方法与发送短信的方法3类似:

 (void)sendmail
{
    // 1. 先判断能否发送邮件
    if (![MFMailComposeViewController canSendMail]) {
        // 提示用户设置邮箱
        return;
    }

    // 2. 实例化邮件控制器,准备发送邮件
    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];

    // 1) 主题 xxx的工作报告
    [controller setSubject:@"我的工作报告"];
    // 2) 收件人
    [controller setToRecipients:@[@"4800607@gmail.com"]];

    // 3) cc 抄送
    // 4) bcc 密送(偷偷地告诉,打个小报告)
    // 5) 正文
    [controller setMessageBody:@"这是我的<font color=\"blue\">工作报告</font>,请审阅!<BR />P.S. 我的头像牛X吗?" isHTML:YES];

    // 6) 附件
    UIImage *image = [UIImage imageNamed:@"头像1.png"];
    NSData *imageData = UIImagePNGRepresentation(image);
    // 1> 附件的二进制数据
    // 2> MIMEType 使用什么应用程序打开附件
    // 3> 收件人接收时看到的文件名称
    // 可以添加多个附件
    [controller addAttachmentData:imageData mimeType:@"image/png" fileName:@"头像.png"];

    // 7) 设置代理
    [controller setMailComposeDelegate:self];

    // 显示控制器
    [self presentViewController:controller animated:YES completion:nil];
}

//同样要记得发完邮件记得调用代理方法关闭窗口
#pragma mark - 邮件代理方法
/**
 MFMailComposeResultCancelled,      取消
 MFMailComposeResultSaved,          保存邮件
 MFMailComposeResultSent,           已经发送
 MFMailComposeResultFailed          发送失败
 */
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    // 根据不同状态提示用户
    NSLog(@"%d", result);

    [self dismissViewControllerAnimated:YES completion:nil];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值