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 - UIActivityViewController的更多相关文章
- iOS 6分享列表——UIActivityViewController详解
iOS 6分享列表——UIActivityViewController详解 2013-06-03 01:42:33 发表评论 在iOS 6之后提供了一个分享列表视图,它通过UIActivity ...
- IOS 7 Study - UIActivityViewController(Presenting Sharing Options)
You want to be able to allow your users to share content inside your apps with theirfriends, through ...
- iOS 开发总结(上)
来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...
- iOS 8 Extensions
本文由海水的味道收集整理,欢迎转载 当前版本 0.0.1 iOS 8 Extensions 一.扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性.扩展让app ...
- iOS - Share 分享/第三方登录
1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...
- 利用UIActivityController调用ios系统自带的分享功能,实现微信发布多图的功能
通过一番查找以后找到一个类UIActivityController,可以调用系统的social.framework中的分享接口.看下面的图就知道了,这个还是挺常见的 微信发布多图 借鉴了CSDN上的一 ...
- 李洪强iOS经典面试题128
1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEnco ...
- iOS 最全面试题
HTTP/1.0 在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP ...
- Adding AirDrop File Sharing Feature to Your iOS Apps
http://www.appcoda.com/ios7-airdrop-programming-tutorial/ Adding AirDrop File Sharing Feature to You ...
随机推荐
- [转]如何:在设备上安装 SQL Server Compact 3.5
将设备连接到计算机,或者将仿真程序插入底座. 有关更多信息,请参见如何:将设备仿真程序插入底座和移除底座. 说明: 计算机上必须已安装了 Windows Mobile Device Center 或 ...
- Recovery with Incremental Backups
During media recovery, RMAN examines the restored files to determine whether it can recover them wit ...
- 再谈自主开发与企业IT管理
前两天写<自主开发与带兵打仗>分析了一下自主开发的利与弊,得到了园内不少朋友的反馈,但我觉得还有很多东西没有交待清楚,可能有很多朋友也跟我一样在公司的IT部门,有自己的研发团队也有很多外购 ...
- SlickGrid example 3b: 支持撤销操作的编辑单元
不同类型的属性可以按不同的风格编辑. 每个编辑单元可以设置不同的验证方法. 历史编辑可以撤销. 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTM ...
- windows下UDP服务器和客户端的实现
UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据. 服务器端 1.初始化 WASStartup ( ... ) 2.创建Socket s ...
- 无聊安装的Microsoft SQL Server2016步骤
SQL Server 下载 ed2k://|file|cn_sql_server_2016_enterprise_x64_dvd_8699450.iso|2452795392|D8AFD8D6245F ...
- Android WebView中的JavaScript代码使用
在WebView中使用JavaScript 如果你想要载入的页面中用了JavaScript,你必须为你的WebView使能JavaScript. 一旦使能之后,你也可以自己创建接口在你的应用和Java ...
- C++中的const详解
const的用法,特别是用在函数后面 在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const ...
- 2016年11月15日 星期二 --出埃及记 Exodus 20:6
2016年11月15日 星期二 --出埃及记 Exodus 20:6 but showing love to a thousand of those who love me and keep my c ...
- JS中innerHTML 和innerText和value的区别
(1)innerHTML 和innerText和value的区别: innerHTML innerText是对非表单元素进行操作的. value是对表单元素进行操作的. (2)innerHTML 和i ...