UIActivityViewController(转)
在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理。苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单。

通过动作选单上的选择按钮,可以把图片分享给别人。但是随着iOS功能的不断增加,需要分享的内容越来越多,它会以模态视图方式呈现。iPad设备的分享列表,它会以Popover视图方式呈现。

从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了。
内置活动列表项
分享列表使用UIActivityViewController来控制它的呈现和关闭,凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。
下 面我们通过一个实例介绍一下使用UIActivityViewController管理内置活动列表项,这个实例点击左画面工具栏中的Action按钮, 会弹出分享列表模态视图(中图所示),如果我们选择了微博,会弹出微博撰写对话框(右图所示),可以在这里撰写微博,完成之后可以点击“发送”按钮发送微 博,如果没有在系统设置中没有设置微博账户信息,则会有提示对话框。

我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:
- - (IBAction)shareAction:(id)sender {
- NSString *textToShare = @”请大家登录《iOS云端与网络通讯》服务网站。”; ①
- UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; ②
- NSURL *urlToShare = [NSURL URLWithString:@"http://www.iosbook3.com"]; ③
- NSArray *activityItems = @[textToShare, imageToShare, urlToShare]; ④
- UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems
- applicationActivities:nil]; ⑤
- //不出现在活动项目
- activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
- UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]; ⑥
- [self presentViewController:activityVC animated:TRUE completion:nil]; ⑦
- }
后面选择微博,以及发送微博这些全部是UIActivityViewController给我们封装好的,我们不需要编写一行代码
自定义活动列表项
有的时候根据我们共享内容不同,需要自动定义活动列表项。例如:你的应用是一个观看视频的应用,那么你可能需要共享视频到“优酷”视频网站。下面这一节我们介绍自定义活动列表项。
凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。这包括了iOS系统通过内置的9个活动列表,也可以是我们自定义的列表项。
下 面我们通过一个实例介绍一下使用UIActivityViewController管理自定义活动列表项,点击左画面工具栏中的Action按钮,会弹出 分享列表模态视图,其中列表中“打开Book”是我们自定义列表项,点击“打开Book”列表项执行一些操作,这里的操作是打开Book网站。

我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:
- - (IBAction)shareAction:(id)sender {
- NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ①
- NSArray *activityItems = @[urlToShare];
- BookActivity *bookActivity = [BookActivity new]; ②
- NSArray *applicationActivities = @[bookActivity];
- UIActivityViewController *activityVC = [[UIActivityViewController alloc]
- initWithActivityItems:activityItems
- applicationActivities:applicationActivities]; ③
- [self presentViewController:activityVC animated:YES completion:nil];
- }
shareAction: 方法与上一节内置活动列表项类似,在本例中我们只需要一个数据项(即提供URL),第①行代码就是提供了URL。第②行代码实例化活动列表项 BookActivity,然后需要把它放到一个NSArray集合中。第③行代码实例化UIActivityViewController对象,构造方 法中applicationActivities部分参数在内置活动列表项为nil,在自定义活动列表项中是指定自定义活动列表项对象集合,就是 NSArray集合。
自定义活动列表项代码实现BookActivity.h的代码如下:
- #import <UIKit/UIKit.h>
- @interface BookActivity : UIActivity
- @property (nonatomic,strong) NSURL *url;
- @end
自定义活动列表项必须继承UIActivity,属性url提供列表项服务的数据项。BookActivity.m的代码如下:
- @implementation BookActivity
- - (NSString *)activityType {
- return NSStringFromClass([self class]); ①
- }
- - (NSString *)activityTitle {
- return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil); ②
- }
- - (UIImage *)activityImage {
- return [UIImage imageNamed:@"Book"]; ③
- }
- - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
- for (id activityItem in activityItems) { ④
- if ([activityItem isKindOfClass:[NSURL class]]) { ⑤
- if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥
- return YES;
- }
- }
- }
- return NO;
- }
- - (void)prepareWithActivityItems:(NSArray *)activityItems {
- for (id activityItem in activityItems) {
- if ([activityItem isKindOfClass:[NSURL class]]) { ⑦
- _url = activityItem; ⑧
- }
- }
- }
- - (void)performActivity {
- BOOL completed = [[UIApplication sharedApplication] openURL:_url]; ⑨
- [self activityDidFinish:completed]; ⑩
- }
- @end
出自《iOS网络编程与云端应用最佳实践》作者:关东升 @tony_关东升
本文出自 “关东升-iOS技术顾问” 博客,请务必保留此出处http://2009315319.blog.51cto.com/701759/1195374
UIActivityViewController(转)的更多相关文章
- UIActivityViewController 系统社交化 共享
1.UIActivityViewController是继承自UIViewController,是拥有VC的特性 a.初始化 init , initWithActivityItems:applicat ...
- 简单跳转到微信分享,基于libWeiChatSDK 和简单的自定义UIActivityViewController
一.自定义UIActivity: 如果想要自定义UIActivity必须知道UIActivityViewController.首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的 ...
- Add sharing to your app via UIActivityViewController
http://www.codingexplorer.com/add-sharing-to-your-app-via-uiactivityviewcontroller/ April 4, 2014 Ev ...
- iOS - UIActivityViewController
前言 NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewControl ...
- UIActivityViewController 自定义选项
UIActivityViewController 自定义选项 重写 UIActivity 类 建议下载github上源码学习一下 https://github.com/samvermette/SVWe ...
- 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 ...
- 研究 UIActivityViewController
研究 UIActivityViewController 发布于:2014-04-25 09:51阅读数:5903 特定的编程语言,如 Lisp.lo 和 Mathematica 都是同像性的(homo ...
- iOS 6分享列表——UIActivityViewController详解
iOS 6分享列表——UIActivityViewController详解 2013-06-03 01:42:33 发表评论 在iOS 6之后提供了一个分享列表视图,它通过UIActivity ...
- 仿简书分享:UIActivityViewController系统原生分享
接下来介绍UIActivityViewController: 1. 创建要分享的数据内容,加在一个数组 ActivityItems里. NSString *textToShare = @"我 ...
随机推荐
- opencv的高斯混合模型
http://blog.jasonding.top/2015/04/05/Machine%20Learning/%E3%80%90%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%8 ...
- 你应该知道的2016年有关App开发的技术创新
上一篇简述了2016年有关App产品的年中总结,这篇开始历数有关App开发的技术创新!无论你是创业者,还是程序员,无论你是否懂编程.写代码,利用APICloud平台数据撰写的年中总结,集合了移动应用创 ...
- 快速理解Docker - 容器级虚拟化解决方案
是什么 简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案 拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具 ...
- Power-BI仪表盘文本框排行分析设计要点
例如:我在BI软件中做一个商品类别TOP5排行. 文本框默认绑定第一列,但是没显示是那个品类. 这里我们需要做几个操作来进行优化. 1.把品类显示出来. 在序列中找到标题进行显示,如果位置有重叠可以进 ...
- jiffies和HZ
全局变量jiffies用来记录自系统启动以来产生的节拍的总数.启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值.一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的 ...
- Group的操作
1. 概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组 示例 2. group by的简单操作 3. Group By中Select指定的字段限制 select指定的 ...
- javascript设计模式学习之四——单例模式,缓存与对象池
单例模式的定义:确保一个实例,并提供全局访问. 惰性单例的定义:只在需要的时候才创建对象. 在开发中,有些对象往往只需要一个,比如线程池.全局缓存.浏览器中的window对象等. java中的单例 关 ...
- UIPickerView详解
一.UIPickerView 1.UIPickerView的常见属性 // 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id< ...
- 算法-KMP串匹配
字符串匹配 http://www.cnblogs.com/jingmoxukong/p/4343770.html 模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串 ...
- bash变量操作
1.条件变量替换: Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 条件放在{}中. (1) ${value:-word} 当变量未定义或者值为空时,返回值为word ...