请问如何在HTML的页面实现调用IOS短信界面,传递预置的收件人和短信内容
想做个HTML的页面实现调用IOS短信界面,传递收件人和短信内容。
安卓的很简单就可以实现了:`测试连接,不要点击`
在苹果IOS上,在【UC浏览器】的话,也是可行的。 但是,IOS微信/自带safari浏览器下均不行,只能带收件人号码,带不了内容,而且,上例的“?body='.urlencode("test#552#13912345678")”会全部作为发件人号码处理。
请求高手指点,怎样实现期待的功能:在HTML的页面实现调用IOS短信界面,传递收件人和短信内容。
(笔者服务器环境:IIS6.0+PHP5.3+MYSQL5.6)
iOS - Phone 电话
1、调用电话
1.1 拨打系统电话
调用系统自带的打电话程序,要跳转到打电话程序,打完电话自动跳转回来。
在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。
URL 地址:tel://电话号码
iOS 系统版本 < 10.0
NSURL *url = [NSURL URLWithString:@"tel://10086"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装应用");
}
iOS 系统版本 >= 10.0
NSURL *url = [NSURL URLWithString:@"tel://10086"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"没有安装应用");
}
1.2 拨打电话
在应用内部打电话,不需要跳出程序,完全在自己的程序中,打完电话自动跳转回来。
UIWebView *callWebView = [[UIWebView alloc] init];
NSURL *url = [NSURL URLWithString:@"tel:10086"];
[callWebView loadRequest:[NSURLRequest requestWithURL:url]];
[self.view addSubview:callWebView];
2、调用短信
2.1 调用系统短信
调用系统自带的信息程序,要跳转到信息程序,发完短信后不会跳转回来。
在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。
URL 地址:sms://电话号码
iOS 系统版本 < 10.0
NSURL *url = [NSURL URLWithString:@"sms://10086"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装应用");
}
iOS 系统版本 >= 10.0
NSURL *url = [NSURL URLWithString:@"sms://10086"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"没有安装应用");
}
2.2 带内容发送短信
在应用内部发送短信,不需要跳出程序,完全在自己的程序中,发送短信后自动跳转回来。可以在程序中设置发送的短信内容。
添加 MessageUI.framework 框架。
在发起发送短信的视图控制器中
// 引入头文件
#import <MessageUI/MessageUI.h>
// 遵守协议
<MFMessageComposeViewControllerDelegate>
发送短信
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
messageVC.messageComposeDelegate = self;
// 设置电话号码
messageVC.recipients = @[@"10086"];
// 设置短信内容
messageVC.body = @"话费余额";
// 调用系统发送短信界面
[self presentViewController:messageVC animated:YES completion:nil];
}
处理发送响应结果
// MFMessageComposeViewControllerDelegate 协议方法
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
[self dismissViewControllerAnimated:YES completion:nil];
if (result == MessageComposeResultCancelled) {
NSLog(@"Message cancelled");
} else if (result == MessageComposeResultSent) {
NSLog(@"Message sent");
} else {
NSLog(@"Message failed");
}
}
3、调用邮件
3.1 发送系统邮件
调用系统自带的邮件程序,要跳转到邮件程序,发完邮件后不会跳转回来。
在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。
URL 地址:mailto://邮件地址
iOS 系统版本 < 10.0
NSURL *url = [NSURL URLWithString:@"mailto://qq0228@163.com"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装应用");
}
iOS 系统版本 >= 10.0
NSURL *url = [NSURL URLWithString:@"mailto://qq0228@163.com"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"没有安装应用");
}
3.2 带内容发送邮件
在应用内部发送邮件,不需要跳出程序,完全在自己的程序中,发送邮件后自动跳转回来。可以在程序中设置发送的邮件内容。
添加 MessageUI.framework 框架。
在发起发送邮件的视图控制器中
// 引入头文件
#import <MessageUI/MessageUI.h>
// 遵守协议
<MFMailComposeViewControllerDelegate>
发送邮件
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
mailVC.mailComposeDelegate = self;
// 设置邮箱
[mailVC setToRecipients:@[@"qq0228@163.com"]];
// 设置邮件主题
[mailVC setSubject:@"Hello"];
// 设置邮件内容
[mailVC setMessageBody:@"Lorem ipsum dolor sit amet" isHTML:NO];
// 调用系统发送邮件界面
[self presentViewController:mailVC animated:YES completion:nil];
}
处理发送响应结果
// MFMailComposeViewControllerDelegate 协议方法
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
[self dismissViewControllerAnimated:YES completion:nil];
if (result == MFMailComposeResultCancelled) {
NSLog(@"Message cancelled");
} else if (result == MFMailComposeResultSent) {
NSLog(@"Message sent");
} else if (result == MFMailComposeResultSaved) {
NSLog(@"Message saved");
} else {
NSLog(@"Message failed");
}
}
4、调用地图
4.1 调用系统地图
在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。
URL 地址:maps://
iOS 系统版本 < 10.0
NSURL *url = [NSURL URLWithString:@"maps://"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装应用");
}
iOS 系统版本 >= 10.0
NSURL *url = [NSURL URLWithString:@"maps://"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"没有安装应用");
}
5、调用浏览器
51 调用系统浏览器
在 iOS9.0 + 系统隐私控制里禁止查询设备中已安装的 App,所以在 iOS9.0 + 系统中要实现应用间跳转还需要配置协议白名单。在发起跳转的 App 的 Info.plist 文件中增加一个 LSApplicationQueriesSchemes 字段,把它设置为数组类型,并配置需要跳转的协议名单。
URL 地址:http://网址 或:https://网址
iOS 系统版本 < 10.0
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装应用");
}
iOS 系统版本 >= 10.0
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"没有安装应用");
}
6、调用应用商店
6.1 调用系统应用商店
找到应用程序的描述链接,然后将 http:// 替换为 itms:// 或者 itms-apps://。比如:
http://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
itms://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
URL 地址:itms-apps://网址 或:itms://网址
itms-apps:// // 调用系统 App Store 应用
itms:// // 调用系统 iTunes Store 应用
iOS 系统版本 < 10.0
NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装应用");
}
iOS 系统版本 >= 10.0
NSURL *url = [NSURL URLWithString:@"itms-apps://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
NSLog(@"没有安装应用");
}
7、保存图片到相册
设置系统访问相册权限
保存图片到相册
// 将图片存储到相册中
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
// 将图片存储到相册中,完成后调用指定的方法
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
// 保存完成后调用的方法,必须为这个方法
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
}
8、访问通讯录
详细讲解见 iOS - Contacts 通讯录
9、获取 wifi 信息
9.1 获取 wifi 名称信息
具体实现代码见 GitHub 源码 QExtension
#import <SystemConfiguration/CaptiveNetwork.h>
NSString * const BSSIDKey = @"BSSID";
NSString * const SSIDKey = @"SSID";
NSString * const SSIDDATAKey = @"SSIDDATA";
// 获取当前 Wifi 信息
+ (NSDictionary *)q_getCurrentWifiInfo {
NSDictionary *wifiDic = [NSDictionary dictionary];
CFArrayRef arrayRef = CNCopySupportedInterfaces();
if (arrayRef != nil) {
CFDictionaryRef dicRef = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(arrayRef, 0));
CFRelease(arrayRef);
if (dicRef != nil) {
wifiDic = (NSDictionary *)CFBridgingRelease(dicRef);
}
}
return wifiDic;
}
// 获取当前 Wifi 信息
NSDictionary *wifiInfo = [NSDictionary q_getCurrentWifiInfo];
NSLog(@"%@", wifiInfo);
NSString *bssid = wifiInfo[BSSIDKey];
NSString *ssid = wifiInfo[SSIDKey];
NSString *ssidData = [[NSString alloc] initWithData:wifiInfo[SSIDDATAKey] encoding:NSUTF8StringEncoding];
NSLog(@"%@\n %@\n %@", bssid, ssid, ssidData);
9.2 获取 IP 地址
具体实现代码见 GitHub 源码 QExtension
#import <arpa/inet.h>
#import <ifaddrs.h>
// 获取本地 IP 地址
+ (NSString *)q_getIPAddress {
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
// retrieve the current interfaces - returns 0 on success
success = getifaddrs(&interfaces);
if (success == 0) {
// Loop through linked list of interfaces
temp_addr = interfaces;
while (temp_addr != NULL) {
if (temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
return address;
}
// 获取本地 IP 地址
NSString *ipStr = [NSString q_getIPAddress];
NSLog(@"%@", ipStr);
iOS开发之调用系统打电话发短信接口以及程序内发短信
在本篇博客开头呢,先说一下写本篇的博客的原因吧。目前在做一个小项目,要用到在本应用程序内发验证码给其他用户,怎么在应用内发送短信的具体细节想不大起来了,于是就百度了一下,发现也有关于这方面的博客,点进去看了看,个人感到有点小失望,写的太不详细,只是简单的代码罗列,而且代码也没注释,大概是因为太简单了吧。今天在做完项目的发短信功能后感觉有必要把这部分内容整理一下,做个纪念也是好的不是吗。废话少说,切入今天的正题。下面的发短信,打电话当然需要真机测试了。
一、调用系统功能
在iOS中打开系统本身的打电话和发短信功能还是比较简单的,之前在SSO中也提了一嘴,iOS中可以由一个应用打开另一个应用,只需要一行代码,打电话,发短信,发email,开网页也是一样的 ,只是用的协议不一样。
1.打电话
这个还是比较简单的,下面是打电话的代码:%@的内容是手机号self.myApplication是Application的单例。
2.发短信
发送短信只是和打电话用的协议不一样改一下协议就可以打电话了
3、发email
也是换一下协议即可
4.打开网址
二、在本应用中打开
上面的方法都是打开相应的应用程序,然后做相应的事情,那么我们如何在本应用中就可以给我们的用户发送短信呢?下面就让我们来实现这个功能
1.引入我们要用的framework(其实在应用程序内发送短信和ImagePickerViewController的用法极为的相似,没有什么困难的地方),我们需要引入MessageUI.framework,入下图
2.在pch文件导入相应头文件
3.下面是实现发送短信的核心代码
(1)判断设备是否有发送短信的功能代码如下:
//发送短信的方法
-(void)sendMessage
{
//用于判断是否有发送短信的功能(模拟器上就没有短信功能)
Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));
//判断是否有短信功能
if (messageClass != nil) {
//有发送功能要做的事情
}
else
{
UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"iOS版本过低(iOS4.0以后)" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[alterView show];
}
}
(2).如果有发送短信功能的话,就得判断iOS版本释放支持"MFMessageComposeViewController". iOS4.0之后支持
//有短信功能
if ([messageClass canSendText]) {
//发送短信
}
else
{
UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"该设备没有发送短信的功能~" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[alterView show];
}
(3)、经过各种验证后确定设备可以使用MFMessageComposeViewController,我们就开始用了//实例化MFMessageComposeViewController,并设置委托
MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.delegate = self;
//拼接并设置短信内容
NSString *messageContent = [NSString stringWithFormat:@"亲爱的,这个是专属属你我应用的邀请码:%@",self.authCodeLabel.text];
messageController.body = messageContent;
//设置发送给谁
messageController.recipients = @[self.phoneNumberTextField.text];
//推到发送试图控制器
[self presentViewController:messageController animated:YES completion:^{
}];
(4),差点给忘了,实现相应的委托回调协议是少不了的~要实现MFMessageComposeViewControllerDelegate,UINavigationControllerDelegate这两个协议。发送后的回调如下://发送短信后回调的方法
-(void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
NSString *tipContent;
switch (result) {
case MessageComposeResultCancelled:
tipContent = @"发送短信已";
break;
case MessageComposeResultFailed:
tipContent = @"发送短信失败";
break;
case MessageComposeResultSent:
tipContent = @"发送成功";
break;
default:
break;
}
UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"提示" message:tipContent delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
[alterView show];
}
到此就可以发送短信了,本篇博客先就到这儿吧~
IOS中调用系统拨打电话与发送短信
IOS中调用系统拨打电话发送短信一、调用打电话界面[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",_phoneNumber]]];二、发送短消息界面调用系统的发送短信的界面,需要引入以下头文件:#import <MessageUI/MessageUI.h>系统短信界面的调用很简单,只需下面几句代码: MFMessageComposeViewController * con = [[MFMessageComposeViewController alloc]init]; if ([MFMessageComposeViewController canSendText]) { con.recipients=@[_phoneNumber];//电话数组 con.messageComposeDelegate=self; [self presentViewController:con animated:YES completion:nil];下面将MessageUI的一些常用方法总结如下:+ (BOOL)canSendText判断是否支持发送文字+ (BOOL)canSendSubject;判断是否支持发送主题信息+ (BOOL)canSendAttachments;判断是否支持发送附件+ (BOOL)isSupportedAttachmentUTI:(NSString *)uti;判断是否支持统一标示附件- (void)disableUserAttachments;禁止发送附件@property(nonatomic,copy) NSArray *recipients;联系人数组,会显示在发送人列表里@property(nonatomic,copy) NSString *body;信息主体内容@property(nonatomic,copy) NSString *subject;信息标题@property(nonatomic,copy, readonly) NSArray *attachments;信息附件数组 只读的 里面是字典- (BOOL)addAttachmentURL:(NSURL *)attachmentURL withAlternateFilename:(NSString *)alternateFilename;根据URL路径和添加附件,返回YES表示添加成功- (BOOL)addAttachmentData:(NSData *)attachmentData typeIdentifier:(NSString *)uti filename:(NSString *)filename;根据Data数据添加附件- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result;MFMessageComposeViewControllerDelegate的代理方法,result会传回来一个结果,枚举如下:enum MessageComposeResult { //取消发送 MessageComposeResultCancelled, //发送成功 MessageComposeResultSent, //发送失败 MessageComposeResultFailed};
IOS 开发调用打电话,发短信
1、调用 自带mail
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hzlzh.com"]];
2、调用 电话phone
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888"]];
iOS应用内拨打电话结束后返回应用
一般在应用中拨打电话的方式是:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
使用这种方式拨打电话时,当用户结束通话后,iphone界面会停留在电话界面。
用如下方式,可以使得用户结束通话后自动返回到应用:
UIWebView*callWebview =[[UIWebView alloc] init];
NSURL *telURL =[NSURL URLWithString:@"tel:10086"];// 貌似tel:// 或者 tel: 都行
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
//记得添加到view上
[self.view addSubview:callWebview];
还有一种私有方法:(可能不能通过审核)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://10086"]];
3、调用 SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
4、调用自带 浏览器 safari
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.hzlzh.com"]];
调用phone可以传递号码,调用SMS 只能设定号码,不能初始化SMS内容。
若需要传递内容可以做如下操作:
加入:MessageUI.framework
#import <MessageUI/MFMessageComposeViewController.h>
实现代理:MFMessageComposeViewControllerDelegate
调用sendSMS函数
//内容,收件人列表
- (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];
if([MFMessageComposeViewController canSendText])
{
controller.body = bodyOfMessage;
controller.recipients = recipients;
controller.messageComposeDelegate = self;
[self presentModalViewController:controller animated:YES];
}
}
// 处理发送完的响应结果
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
[self dismissModalViewControllerAnimated:YES];
if (result == MessageComposeResultCancelled)
NSLog(@"Message cancelled")
else if (result == MessageComposeResultSent)
NSLog(@"Message sent")
else
NSLog(@"Message failed")
}
默认发送短信的界面为英文的,解决办法为:
在.xib 中的Localization添加一組chinese就ok了
最新内容请见作者的GitHub页:http://qaseven.github.io/
iOS - UIActivityViewController
前言
NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewController
@available(iOS 6.0, *) public class UIActivityViewController : UIViewController
UIActivity 是 iOS 6.0 开始的一个十分有用的控件,可以十分方便的将文字、图片等内容进行分享,比如分享到微信、新浪微博、发邮件、发短信等。我们不仅可以分享内容出来,也可以在自己的 App 里添加自定义的分享按钮或者隐藏已有的分享按钮来实现定制的功能。
1、系统 activityViewController 的创建
Objective-C
// 设置分享的内容
NSString *textToShare = @"请大家登录《iOS云端与网络通讯》服务网站。";
UIImage *imageToShare = [UIImage imageNamed:@"swift"];
NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"];
// 创建分享视图控制器
/*
activityItems: 分享的内容
applicationActivities: 分享的类型,默认(nil)时为 UIActivity
*/
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
initWithActivityItems:@[textToShare, imageToShare, urlToShare]
applicationActivities:nil];
// 设置不出现的分享按钮
/*
Activity 类型又分为 “操作” 和 “分享” 两大类:
UIActivityCategoryAction 操作:
UIActivityTypeAirDrop AirDrop AirDrop
UIActivityTypePrint 打印 Print
UIActivityTypeSaveToCameraRoll 保存到相册 Save Image
UIActivityTypeAssignToContact 添加到联系人 AssignToContact
UIActivityTypeAddToReadingList 添加到 Safari 阅读列表 AddToReadingList
UIActivityTypeCopyToPasteboard 复制到剪贴板 Copy
UIActivityCategoryShare 分享:
UIActivityTypeMail 邮箱 Mail
UIActivityTypeMessage 短信 Message
UIActivityTypePostToTwitter 分享到 Twitter
UIActivityTypePostToFacebook 分享到 Facebook
UIActivityTypePostToVimeo 分享到 Vimeo(视频媒体)
UIActivityTypePostToFlickr 分享到 Flickr(网络相簿)
UIActivityTypePostToWeibo 分享到 新浪微博
UIActivityTypePostToTencentWeibo 分享到 腾讯微博
添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
*/
activityViewController.excludedActivityTypes = @[UIActivityTypeAssignToContact,
UIActivityTypePrint];
// 显示分享视图控制器
[self presentViewController:activityViewController animated:YES completion:nil];
// 分享完成
activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed,
NSArray *returnedItems, NSError *activityError) {
// 分享完成或退出分享时调用该方法
NSLog(@"分享完成");
};
Swift
// 设置分享的内容
let textToShare = "请大家登录《iOS云端与网络通讯》服务网站。"
let imageToShare: AnyObject = UIImage(named: "swift") as! AnyObject
let urlToShare: AnyObject = NSURL(string: "http://m.baidu.com") as! AnyObject
// 创建分享视图控制器
/*
activityItems: 分享的内容
applicationActivities: 分享的类型,默认(nil)时为 UIActivity
*/
let activityViewController = UIActivityViewController(activityItems: [textToShare, imageToShare, urlToShare],
applicationActivities: nil)
// 设置不出现的分享按钮
/*
Activity 类型又分为 “操作” 和 “分享” 两大类:
UIActivityCategoryAction 操作:
UIActivityTypeAirDrop AirDrop AirDrop
UIActivityTypePrint 打印 Print
UIActivityTypeSaveToCameraRoll 保存到相册 Save Image
UIActivityTypeAssignToContact 添加到联系人 AssignToContact
UIActivityTypeAddToReadingList 添加到 Safari 阅读列表 AddToReadingList
UIActivityTypeCopyToPasteboard 复制到剪贴板 Copy
UIActivityCategoryShare 分享:
UIActivityTypeMail 邮箱 Mail
UIActivityTypeMessage 短信 Message
UIActivityTypePostToTwitter 分享到 Twitter
UIActivityTypePostToFacebook 分享到 Facebook
UIActivityTypePostToVimeo 分享到 Vimeo(视频媒体)
UIActivityTypePostToFlickr 分享到 Flickr(网络相簿)
UIActivityTypePostToWeibo 分享到 新浪微博
UIActivityTypePostToTencentWeibo 分享到 腾讯微博
添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
*/
activityViewController.excludedActivityTypes = [UIActivityTypeAssignToContact, UIActivityTypePrint]
// 显示分享视图控制器
self.presentViewController(activityViewController, animated: true, completion: nil)
// 分享完成
activityViewController.completionWithItemsHandler = { activityType, completed, returnedItems, activityError in
// 分享完成或退出分享时调用该方法
print("分享完成")
}
2、自定义 activityViewController 的创建
Objective-C
myUIActivity.h
@interface myUIActivity : UIActivity
@end
myUIActivity.m
/*
自定义分享按钮
*/
@implementation myUIActivity
// 设置分享按钮的类型
- (NSString *)activityType {
// 在 completionWithItemsHandler 回调里可以用于判断,一般取当前类名
return NSStringFromClass([myUIActivity class]);
}
// 设置分享按钮的标题
- (NSString *)activityTitle {
// 设置显示在分享框里的名称
return @"myUIActivity";
}
// 设置分享按钮的图片
- (UIImage *)activityImage {
// 图片自定变为黑白色,默认尺寸为 56 * 56 像素
return [UIImage imageNamed:@"JHQ0228"];
}
// 设置是否显示分享按钮
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
// 这里一般根据用户是否授权等来决定是否要隐藏分享按钮
return YES;
}
// 预处理分享数据
- (void)prepareWithActivityItems:(NSArray *)activityItems {
// 解析分享数据时调用,可以进行一定的处理
}
// 执行分享
- (UIViewController *)activityViewController {
// 点击自定义分享按钮时调用,跳转到自定义的视图控制器
return nil;
}
// 执行分享
- (void)performActivity {
// 点击自定义分享按钮时调用
}
// 完成分享
- (void)activityDidFinish:(BOOL)completed {
// 分享视图控制器退出时调用
}
@end
ViewController.m
// 设置分享的内容
NSString *textToShare = @"请大家登录《iOS云端与网络通讯》服务网站。";
UIImage *imageToShare = [UIImage imageNamed:@"swift"];
NSURL *urlToShare = [NSURL URLWithString:@"http://m.baidu.com"];
// 设置分享的类型
myUIActivity *myActivity = [[myUIActivity alloc] init];
// 创建分享视图控制器
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]
initWithActivityItems:@[textToShare, imageToShare, urlToShare]
applicationActivities:@[myActivity]];
// 设置不出现的分享按钮
/*
添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
*/
activityViewController.excludedActivityTypes = @[UIActivityTypeAssignToContact,
UIActivityTypePrint,
UIActivityTypeAssignToContact,
UIActivityTypeAddToReadingList,
UIActivityTypeCopyToPasteboard];
// 显示分享视图控制器
[self presentViewController:activityViewController animated:YES completion:nil];
// 分享完成
activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed,
NSArray *returnedItems, NSError *activityError) {
// 分享完成或退出分享时调用该方法
NSLog(@"分享完成");
};
Swift
myUIActivity.swift
/*
自定义分享按钮
*/
class myUIActivity: UIActivity
// 设置分享按钮的类型
override func activityType() -> String? {
// 在 completionWithItemsHandler 回调里可以用于判断,一般取当前类名
return NSStringFromClass(myUIActivity.self)
}
// 设置分享按钮的标题
override func activityTitle() -> String? {
// 设置显示在分享框里的名称
return "myUIActivity"
}
// 设置分享按钮的图片
override func activityImage() -> UIImage? {
// 图片自定变为黑白色,默认尺寸为 56 * 56 像素
return UIImage(named: "JHQ0228")
}
// 设置是否显示分享按钮
override func canPerformWithActivityItems(activityItems: [AnyObject]) -> Bool {
// 这里一般根据用户是否授权等来决定是否要隐藏分享按钮
return true
}
// 预处理分享数据
override func prepareWithActivityItems(activityItems: [AnyObject]) {
// 解析分享数据时调用,可以进行一定的处理
}
// 执行分享
override func activityViewController() -> UIViewController? {
// 点击自定义分享按钮时调用,跳转到自定义的视图控制器
return nil
}
// 执行分享
override func performActivity() {
// 点击自定义分享按钮时调用
}
// 完成分享
override func activityDidFinish(completed: Bool) {
// 分享视图控制器退出时调用
}
ViewController.swift
// 设置分享的内容
let textToShare = "请大家登录《iOS云端与网络通讯》服务网站。"
let imageToShare: AnyObject = UIImage(named: "swift") as! AnyObject
let urlToShare: AnyObject = NSURL(string: "http://m.baidu.com") as! AnyObject
// 设置分享的类型
let myActivity = myUIActivity()
// 创建分享视图控制器
let activityViewController = UIActivityViewController(activityItems: [textToShare, imageToShare, urlToShare],
applicationActivities: [myActivity])
// 设置不出现的分享按钮
/*
添加到此数组中的系统分享按钮项将不会出现在分享视图控制器中
*/
activityViewController.excludedActivityTypes = [UIActivityTypeAssignToContact,
UIActivityTypePrint,
UIActivityTypeAssignToContact,
UIActivityTypeAddToReadingList,
UIActivityTypeCopyToPasteboard]
// 显示分享视图控制器
self.presentViewController(activityViewController, animated: true, completion: nil)
// 分享完成
activityViewController.completionWithItemsHandler = { activityType, completed, returnedItems, activityError in
// 分享完成或退出分享时调用该方法方法
print("分享完成")
}
3、手动执行分享操作
Objective-C
打开 URL
// 调用 Safari 浏览器打开,系统支持的 URL scheme 包括:mailto://、tel://、sms://、and maps://
[[UIApplication sharedApplication] openURL:activityItems[2]];
添加到 Safari 阅读列表
// 需要包含头文件 #import <SafariServices/SafariServices.h>
[[SSReadingList defaultReadingList] addReadingListItemWithURL:activityItems[2]
title:@"百度"
previewText:@"百度一下,你就知道" error:nil];
保存到相册
UIImageWriteToSavedPhotosAlbum(activityItems[1], nil, nil, nil);
发送短信
// 需要包含头文件 #import <MessageUI/MessageUI.h> ,遵守协议 <UINavigationControllerDelegate>
MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
messageVC.delegate = self;
messageVC.recipients = @[@"mattt@nshipster•com"];
messageVC.body = @"Lorem ipsum dolor sit amet";
[self presentViewController:messageVC animated:YES completion:nil];
发送邮件
// 需要包含头文件 #import <MessageUI/MessageUI.h>
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
[mailVC setToRecipients:@[@"mattt@nshipster•com"]];
[mailVC setSubject:@"Hello"];
[mailVC setMessageBody:@"Lorem ipsum dolor sit amet" isHTML:NO];
[self presentViewController: mailVC animated:YES completion:nil];
发送推文
// 需要包含头文件 #import <Twitter/Twitter.h>
TWTweetComposeViewController *tweetVC = [[TWTweetComposeViewController alloc] init];
[tweetVC setInitialText:@"Lorem ipsum dolor sit amet."];
[self presentViewController: tweetVC animated:YES completion:nil];
Swift
打开 URL
// 调用 Safari 浏览器打开,系统支持的 URL scheme 包括:mailto://、tel://、sms://、and maps://
UIApplication.sharedApplication().openURL(activityItems[2] as! NSURL)
添加到 Safari 阅读列表
// 需要包含头文件 import SafariServices
SSReadingList.defaultReadingList().addReadingListItemWithURL(activityItems[2] as! NSURL,
title: "百度",
previewText: "百度一下,你就知道",
error: nil)
保存到相册
UIImageWriteToSavedPhotosAlbum(activityItems[1] as! UIImage, nil, nil, nil);
发送短信
// 需要包含头文件 import MessageUI ,遵守协议 UINavigationControllerDelegate
var messageVC = MFMessageComposeViewController()
messageVC.delegate = self
messageVC.recipients = ["mattt@nshipster•com"]
messageVC.body = "Lorem ipsum dolor sit amet"
self.presentViewController(messageVC, animated:true, completion:nil)
发送邮件
// 需要包含头文件 import MessageUI
var mailVC = MFMailComposeViewController()
mailVC.setToRecipients(["mattt@nshipster•com"])
mailVC.setSubject("Hello")
mailVC.setMessageBody("Lorem ipsum dolor sit amet", isHTML:false)
self.presentViewController(mailVC, animated:true, completion:nil)
IOS中调用系统拨打电话与发送短信
IOS中调用系统拨打电话发送短信
一、调用打电话界面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",_phoneNumber]]];
二、发送短消息界面
调用系统的发送短信的界面,需要引入以下头文件:
#import <MessageUI/MessageUI.h>
系统短信界面的调用很简单,只需下面几句代码:
?
1
2
3
4
5
MFMessageComposeViewController * con = [[MFMessageComposeViewController alloc]init];
if ([MFMessageComposeViewController canSendText]) {
con.recipients=@[_phoneNumber];//电话数组
con.messageComposeDelegate=self;
[self presentViewController:con animated:YES completion:nil];
下面将MessageUI的一些常用方法总结如下:
+ (BOOL)canSendText
判断是否支持发送文字
+ (BOOL)canSendSubject;
判断是否支持发送主题信息
+ (BOOL)canSendAttachments;
判断是否支持发送附件
+ (BOOL)isSupportedAttachmentUTI:(NSString *)uti;
判断是否支持统一标示附件
- (void)disableUserAttachments;
禁止发送附件
@property(nonatomic,copy) NSArray *recipients;
联系人数组,会显示在发送人列表里
@property(nonatomic,copy) NSString *body;
信息主体内容
@property(nonatomic,copy) NSString *subject;
信息标题
@property(nonatomic,copy, readonly) NSArray *attachments;
信息附件数组 只读的 里面是字典
- (BOOL)addAttachmentURL:(NSURL *)attachmentURL withAlternateFilename:(NSString *)alternateFilename;
根据URL路径和添加附件,返回YES表示添加成功
- (BOOL)addAttachmentData:(NSData *)attachmentData typeIdentifier:(NSString *)uti filename:(NSString *)filename;
根据Data数据添加附件
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result;
MFMessageComposeViewControllerDelegate的代理方法,result会传回来一个结果,枚举如下:
?
1
2
3
4
5
6
7
8
enum MessageComposeResult {
//取消发送
MessageComposeResultCancelled,
//发送成功
MessageComposeResultSent,
//发送失败
MessageComposeResultFailed
};
《iOS 8开发指南(第2版)》——第1章,第1.1节iOS系统介绍
本节书摘来自异步社区《iOS 8开发指南(第2版)》一书中的第1章,第1.1节1.1 iOS系统介绍,作者 管蕾,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.1 iOS系统介绍iOS 8开发指南(第2版)iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Mac World大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X操作系统一样,本来这个系统名为iPhone OS,直到2010年6月7日WWDC大会上才宣布改名为iOS。
1.1.1 iOS发展史iOS最早于2007年1月9日的苹果Mac World展览会上公布,随后于同年的6月发布第一版iOS操作系统,当初的名称为“iPhone运行OS X”。
2007年10月17日,苹果公司发布了第一个本地化iPhone应用程序开发包(SDK)。
2008年3月6日,苹果发布了第一个测试版开发包,并且将“iPhone runs OS X”改名为“iPhone OS”。
2008年9月,苹果公司将iPod touch的系统也换成了“iPhone OS”。
2010年2月27日,苹果公司发布iPad,iPad同样搭载了“iPhone OS”。
2010年6月,苹果公司将“iPhone OS”改名为“iOS”,同时还获得了思科iOS的名称授权。
2010年第四季度,苹果公司的iOS占据了全球智能手机操作系统26%的市场份额。
2011年10月4日,苹果公司宣布iOS平台的应用程序已经突破50万个。
2012年2月,应用总量达到552 247个,其中游戏应用最多,达到95 324个,比重为17.26%。
2012年6月,苹果公司在WWDC 2012上推出了全新的iOS 6,提供了超过200 项新功能。
2013年6月10日,苹果公司在WWDC 2013上发布了iOS 7,几乎重绘了所有的系统APP,去掉了所有的仿实物化,整体设计风格转为扁平化设计。
2013年9月10日,苹果公司在2013秋季新品发布会上正式提供iOS 7下载更新。
2014年6月3日,苹果公司在WWDC 2014开发者大会上正式发布了全新的iOS 8操作系统。
1.1.2 全新的版本——iOS 8北京时间2014年6月3日凌晨,苹果年度全球开发者大会 WWDC 2014 在美国加利福尼亚州旧金山莫斯考尼西中心(Moscone Center)拉开帷幕。本次大会上苹果正式公布了最新版iOS系统版本iOS 8。全新的iOS 8继续延续了iOS 7的风格,只是在原有风格的基础上做了一些局部和细节上的优化、改进和完善,更加令人愉悦。iOS 8系统最突出的新特性如下所示。
(1)短信界面可以发送语音
iOS 8很特别的一个新功能,短信界面除了可以发送文字和图片之外,还可以直接录制语音或者视频并直接发送给对方,这一功能和国内的交友软件——微信十分类似。
(2)输入法新功能:支持联想/可记忆学习
iOS 8内建的输入法增加了和SwiftKey类似的功能,这是一款在安卓手机中非常流行的输入方式。iOS 8的全新输入功能名为QuickType,最突出的特点就是为用户提供“预测性建议”,它会对用户的习惯进行学习,进而在其录入文字的时候为其提供建议,从而大幅提升文字输入速度。
(3)更加实用的通知系统
在iOS 8系统下,用户可以直接在通知中进行回复,包括短信、微博等在内的所有消息,即便是在锁屏界面也可以进行操作。另外,当双击Home按键开启任务栏界面后,会在上方显示一行最常用的联系人,用户可以直接在上面给其中某一个人发短信、打电话。
(4)正式挺进方兴未艾的健康和健身市场
在iOS 8系统中内置了Healthbook应用,这是一款在iOS 8系统中运行的应用程序,苹果将利用它挺进方兴未艾的健康和健身市场,这一直是可穿戴设备公司追逐多年的重要领域。苹果公司的Healthbook应用程序将对用户的身体信息进行跟踪统计,其中包括步数、体重、卡路里燃烧量、心率、血压,甚至人体的水分充足状况。
(5)其他新特性
消息推送新方式:用户可直接下拉通知栏回复消息。多任务管理界面:在其上方新增最近联系人,并可直接进行发邮件、打电话等操作。邮件:用户可直接在邮件界面快速调出日历,快速创建日程事项,此外,还可以在侧边栏通过手势快速处理邮件。全局搜索更强大:用户可以在设备中实现搜索电影、新闻、音乐等。iMessage功能更强大:加入群聊功能,可以添加/删除联系人,并且新增了语音发送功能。iPad新增接听来电功能:用iPad也可以接听电话。新增iCloud Drive云盘服务:实现在所有的Mac电脑和iOS设备,甚至Windows电脑之间共享文件。企业服务方面:进一步增强易用性和安全性。家庭共享(Family Sharing):家庭成员间可共享日程、位置、图片和提醒事项等。另外,还可以通过该功能追踪家庭成员的具体位置。照片新功能:新的Photo加入了更多的编辑功能,以及更智能的分类建议。此外,还加入iCloud(5GB免费空间),实现多设备之间共享。Siri进一步更新:可直接用“hey siri”唤醒。支持中国农历显示,增强输入法和天气数据。(6)针对开发者的新特性
支持第三方键盘。自带网页翻译功能,如在线即时翻译功能。指纹识别功能开放,使用第三方软件可以调用。Safari浏览器可直接添加新的插件。可以把一个网页上的所有图片打包分享到Pinterest。支持第三方输入法:将是否授权输入法的选择留给用户。Home Kit智能家居:可以利用iPhone对家居,如灯光等进行控制。3D图像应用Metal:可以更充分利用CPU和GPU的性能。引入全新基于C语言的编程语言Swift。全新的Xcode。相机和照片API也实现开放。
iOS开发经验总结,我的2019进阶之路!
4G改变了生活,抓住机会的人已经在这个社会有了立足之地,马上迎来5G的时代,你做好准备了吗!对于即将迎来的5G时代,无疑会是音视频的又一个高潮!那么作为程序员的我们,应该怎么样去迎接它呢~~
改变带来的不是淘汰,而是机会!
底层进阶:
iOS底层进阶成了当今iOS开发人员的必经之路。无论开发还是面试,iOS 进阶的底层知识是作为一个iOS开发必须要掌握的知识;尤其在底层原理方向,底层源码必须要有自己的见解。
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。
runtime、runloop、KVC、KVO、多线程(GCD)、网络层(socket)、单元测试、持续集成、 自动打包、架构模式、性能优化等等~
不管是否坚持选择iOS开发,我个人认为了解底层是必须的,编程行业所谓的“一通百通”是偏向于正确的,所以我认为只有学会了底层,才能让我在以后有更多的方向选择!
看源码无聊吗?当然很无聊!!!!
但是当我想去找回当时大学所学的安卓、前端等技能时,似乎出现了一点问题!这些看似很简单吸收的技能,它实际上确实很简单~
应用层的东西,实际上靠实践和记忆很容易吸收入门,随便搭建一两个简单的项目就会了,但是想要去精通确很难!
也是在这个时候我庆幸,我当时没有一个直接走向所谓“全栈”的想法,如果按照这种方式来走向全栈,那么还有一个词似乎会更贴切“码农”
所以我最后会抛弃掉“广”这个领域,而选择“深”!
逆向开发
1、ios逆向工程指的是在软件层面上进行逆向分析的一个过程。
如果想要达到对ios软件较强的逆向分析能力,最好能非常熟悉ios设备的硬件构成、ios系统的运行原理,还要具备丰富的ios开发经验,比如:拿到一个App之后能清晰的推断出这个App使用的技术,包括引用了那些FrameWork,那些经典的第三方代码,以及整个App工程大致的文件个数等。
2、逆向工程的主要两个作用:首先是攻破目标程序,拿到关键信息,可以归类于安全相关的逆向工程,其次是借鉴他人的程序功能来开发自己的软件,可以归类于开发相关的逆向工程
3、与安全相关的ios逆向工程
ios 逆向工程最突出的应用领域就是与安全相关的,比如:通过逆向一个金融App,来评定这个软件的安全等级,安全专家通过逆向ios病毒,来找到杀毒的方法,安全公司通过逆向ios系统电话、短信功能,来构建一个手机防火墙
这个时候我相信会有很多人问:我正向开发似乎用不到!
与开发相关的ios逆向工程
开发者可以逆向系统调用,在自己的程序里使用一些文档中没有提及的私有功能,还可以逆向一些经典的软件等
a.逆向系统调用
开发者编写的软件能够运行在操作系统中,提供各种各样的功能,是因为操作系统本身已经内嵌了这些功能,软件只是拿来重组使用。绝大多数的App的实现都源于公开的开发文档,而不能使用诸如锁屏,关机等文档中不涉及的功能,如果你的程序面向Cydia,那么不采用非公开功能将导致程序几乎没有竞争力,故可以通过逆向ios系统调用,还原系统实现相应功能的代码,并应用到自己的程序中。
b.借鉴别的软件
逆向工程最受欢迎的应用场合就是“借鉴”他人的软件功能。
图形视觉
作为5G时代即将火热的音视频方向当然是不能丢的,那么其实在这方面肯定不会是只有什么硬解码、软解码这些!
OpenGL ES/Metal/SpriteKit/GPUImage等框架,内容涉及到底层图形渲染到滤镜处理底层实现。适用于想往音视频、图形图像底层方向发展的学习。 OpenGL ES 覆盖到底层滤镜实现以及常见工作项目场景实现,Metal 涉及到MetalShadingLangurage语言以及Metal案例实现分析。GPUImage框架包括底层源码分析以及使用。
最后:
(不同的语言就像在同一起跑线的赛车!刚开始接触iOS,并且从事相关工作,你只是给自己搭建了一个普普通通的三轮车,能跑就行,而深入的学习才是为了让你的三轮车变成法拉利,不管你会跑哪一个赛道,你只有变成法拉利才能够去战胜别人,跑的比别人快!)
iOS开发中打电话发短信等功能的实现
原文:iOS开发中打电话发短信等功能的实现
在APP开发中,可能会涉及到打电话、发短信、发邮件等功能。比如说,通常一个产品的“关于”页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉及到了打电话的功能。
iOS开发中,有三种方式可以打电话:
(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 ]];
推荐使用第三种方法。
有两种方式可以发短信。
(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];
}
建议使用第二种方法。
有两种方式可以发邮件。
(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];
}
推荐使用第二种方法。