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

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

从图中可以看出分享列表中可以有很多页,每页有9个应用,可以左右滑动翻页,这样就可以共享更多的内容了。

内置活动列表项

分享列表使用UIActivityViewController来控制它的呈现和关闭,凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。

下 面我们通过一个实例介绍一下使用UIActivityViewController管理内置活动列表项,这个实例点击左画面工具栏中的Action按钮, 会弹出分享列表模态视图(中图所示),如果我们选择了微博,会弹出微博撰写对话框(右图所示),可以在这里撰写微博,完成之后可以点击“发送”按钮发送微 博,如果没有在系统设置中没有设置微博账户信息,则会有提示对话框。

我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:

  1. - (IBAction)shareAction:(id)sender {
  2. NSString *textToShare = @”请大家登录《iOS云端与网络通讯》服务网站。”; ①
  3. UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; ②
  4. NSURL *urlToShare = [NSURL URLWithString:@"http://www.iosbook3.com"]; ③
  5. NSArray *activityItems = @[textToShare, imageToShare, urlToShare];       ④
  6. UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems
  7. applicationActivities:nil];  ⑤
  8. //不出现在活动项目
  9. activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
  10. UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]; ⑥
  11. [self presentViewController:activityVC animated:TRUE completion:nil];  ⑦
  12. }

后面选择微博,以及发送微博这些全部是UIActivityViewController给我们封装好的,我们不需要编写一行代码

自定义活动列表项

有的时候根据我们共享内容不同,需要自动定义活动列表项。例如:你的应用是一个观看视频的应用,那么你可能需要共享视频到“优酷”视频网站。下面这一节我们介绍自定义活动列表项。

凡是继承UIActivity抽象类的子类对象都可以放在列表中呈现出来。这包括了iOS系统通过内置的9个活动列表,也可以是我们自定义的列表项。

下 面我们通过一个实例介绍一下使用UIActivityViewController管理自定义活动列表项,点击左画面工具栏中的Action按钮,会弹出 分享列表模态视图,其中列表中“打开Book”是我们自定义列表项,点击“打开Book”列表项执行一些操作,这里的操作是打开Book网站。

我们下面介绍一下代码实现部分,代码参考ViewController.m的shareAction:方法:

  1. - (IBAction)shareAction:(id)sender {
  2. NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ①
  3. NSArray *activityItems = @[urlToShare];
  4. BookActivity *bookActivity = [BookActivity new];  ②
  5. NSArray *applicationActivities = @[bookActivity];
  6. UIActivityViewController *activityVC = [[UIActivityViewController alloc]
  7. initWithActivityItems:activityItems
  8. applicationActivities:applicationActivities];  ③
  9. [self presentViewController:activityVC animated:YES completion:nil];
  10. }

shareAction: 方法与上一节内置活动列表项类似,在本例中我们只需要一个数据项(即提供URL),第①行代码就是提供了URL。第②行代码实例化活动列表项 BookActivity,然后需要把它放到一个NSArray集合中。第③行代码实例化UIActivityViewController对象,构造方 法中applicationActivities部分参数在内置活动列表项为nil,在自定义活动列表项中是指定自定义活动列表项对象集合,就是 NSArray集合。

自定义活动列表项代码实现BookActivity.h的代码如下:

  1. #import <UIKit/UIKit.h>
  2. @interface BookActivity : UIActivity
  3. @property (nonatomic,strong) NSURL *url;
  4. @end

自定义活动列表项必须继承UIActivity,属性url提供列表项服务的数据项。BookActivity.m的代码如下:

  1. @implementation BookActivity
  2. - (NSString *)activityType  {
  3. return NSStringFromClass([self class]); ①
  4. }
  5. - (NSString *)activityTitle {
  6. return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil);  ②
  7. }
  8. - (UIImage *)activityImage {
  9. return [UIImage imageNamed:@"Book"]; ③
  10. }
  11. - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
  12. for (id activityItem in activityItems) { ④
  13. if ([activityItem isKindOfClass:[NSURL class]]) { ⑤
  14. if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥
  15. return YES;
  16. }
  17. }
  18. }
  19. return NO;
  20. }
  21. - (void)prepareWithActivityItems:(NSArray *)activityItems {
  22. for (id activityItem in activityItems) {
  23. if ([activityItem isKindOfClass:[NSURL class]]) { ⑦
  24. _url = activityItem;  ⑧
  25. }
  26. }
  27. }
  28. - (void)performActivity {
  29. BOOL completed = [[UIApplication sharedApplication] openURL:_url];  ⑨
  30. [self activityDidFinish:completed];  ⑩
  31. }
  32. @end

出自《iOS网络编程与云端应用最佳实践》作者:关东升 @tony_关东升

本文出自 “关东升-iOS技术顾问” 博客,请务必保留此出处http://2009315319.blog.51cto.com/701759/1195374

UIActivityViewController(转)的更多相关文章

  1. UIActivityViewController 系统社交化 共享

    1.UIActivityViewController是继承自UIViewController,是拥有VC的特性 a.初始化 init  , initWithActivityItems:applicat ...

  2. 简单跳转到微信分享,基于libWeiChatSDK 和简单的自定义UIActivityViewController

    一.自定义UIActivity: 如果想要自定义UIActivity必须知道UIActivityViewController.首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的 ...

  3. Add sharing to your app via UIActivityViewController

    http://www.codingexplorer.com/add-sharing-to-your-app-via-uiactivityviewcontroller/ April 4, 2014 Ev ...

  4. iOS - UIActivityViewController

    前言 NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewControl ...

  5. UIActivityViewController 自定义选项

    UIActivityViewController 自定义选项 重写 UIActivity 类 建议下载github上源码学习一下 https://github.com/samvermette/SVWe ...

  6. 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 ...

  7. 研究 UIActivityViewController

    研究 UIActivityViewController 发布于:2014-04-25 09:51阅读数:5903 特定的编程语言,如 Lisp.lo 和 Mathematica 都是同像性的(homo ...

  8. iOS 6分享列表——UIActivityViewController详解

    iOS 6分享列表——UIActivityViewController详解 2013-06-03 01:42:33     发表评论 在iOS 6之后提供了一个分享列表视图,它通过UIActivity ...

  9. 仿简书分享:UIActivityViewController系统原生分享

    接下来介绍UIActivityViewController: 1. 创建要分享的数据内容,加在一个数组 ActivityItems里. NSString *textToShare = @"我 ...

随机推荐

  1. [转]Android 延迟执行

    开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主 ...

  2. VI使用技巧

    命令模式下: 1.YY 拷贝当前行 2.P 粘贴拷贝的内容 3.dd 删除当前行 4.输入“:set nu”,显示行号 5.输入“G”,到文件尾部.输入“gg”,到文件头部. 6.输入“/字符串”,进 ...

  3. 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型

    参考网址:http://blog.csdn.net/zhanglianpin/article/details/41575849 绝对的经典.

  4. delegate and event

    事件是特殊的委托 委托:第一个方法注册用“=”,是赋值语法,因为要进行实例化,第二个方法注册则用的是“+=”   修饰符应该public的时候public,应该private的时候private 事件 ...

  5. 使用Docker搭建consul集群+registrator实现服务自动注册。

    准备工作:10.173.16.83 master10.172.178.76 node110.171.19.139 node210.162.204.252 node3 一.安装consul-cluste ...

  6. 微信支付开发(1) 微信支付URL配置

    由于微信支付接口更新,本文档已过期,请查看新版微信支付教程.地址 http://www.cnblogs.com/txw1958/category/624506.html 本文介绍微信支付申请时如何设置 ...

  7. Encode & decode

    1. 埃特巴什码 (Aitebashen Password) Definition: 最后一个字母代表第一个字母,倒数第二个字母代表第二个字母. 常文:a b c d e f g h i j k l ...

  8. 快速理解Docker - 容器级虚拟化解决方案

    是什么 简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案 拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具 ...

  9. Java开发遇到的问题及解决方案

    一.java.lang.OutOfMemoryError 问题:myeclipse 内存不足,又显示内存溢出等问题怎么回事?( java.lang.OutOfMemoryError: PermGen ...

  10. 【转】解决:fatal error C1083: 无法打开预编译头文件

    http://blog.csdn.net/aafengyuan/article/details/7988584 是这样的,我创建了一个空项目,并通过"项目属性>C/C++>预编译 ...