在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 6分享列表——UIActivityViewController详解相关推荐

  1. iOS 证书申请和使用详解

    iOS 证书申请和使用详解 对于iOS开发者来说,apple开发者账号肯定不会陌生.在开发中我们离不开它.下面我简单的为大家分享一下关于iOS开发中所用的证书相关知识. 第一部分:成员介绍 1.Cer ...

  2. iOS 证书与签名 解惑详解

    iOS 证书与签名 解惑详解 分类: iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报 iosxcodecryptographyappleiphone测试 目录(? ...

  3. iOS开发之Accounts框架详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...

  4. 微信小程序详解 php,微信小程序列表开发详解

    本文主要和大家分享微信小程序列表开发详解,主要以代码的形式和大家分享,希望能帮助到大家. 一.知识点 (一).列表渲染 wx:for tip:wx:for="array"可以等于参 ...

  5. python中列表数据类型_Python数据类型之List列表实例详解

    本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...

  6. iOS 开发之照片框架详解

    一. 概要 在 iOS 设备中,照片和视频是相当重要的一部分.最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法.在 iOS 8 出现之前,开发者只能使用 A ...

  7. iOS富文本字符串AttributedString详解

    原文链接: iOS富文本字符串AttributedString详解 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://gi ...

  8. iOS中MVC等设计模式详解

    iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...

  9. iOS申请发布证书-图文详解

    iOS申请发布证书-图文详解 首先登陆https://developer.apple.com 选择iOS Developer program 板块下的 Certificates,Identifiers ...

  10. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

最新文章

  1. java 柱状图下载_(JFreeChart)Java图表制作
  2. Knockout 监控数组对象属性
  3. Go gin使用html模板
  4. python对excel表格操作
  5. REHL yum的配置(本地和centos源)
  6. c语言中,char型数据是以什么形式存储的?
  7. mysql中连接和断开数据库_robot framework——连接和断开mysql数据库
  8. 润乾报表 - 细节问题
  9. 男人 30 岁前要做的 22 件事
  10. leaflet 加载海量点位,点击marker 查看详情功能
  11. 转速传感器隔离放大器输出信号隔离变送器正弦波转方波信号隔离器
  12. Windows10蓝屏提示错误操作Wdwifi.sys
  13. 苹果开发者后台,修改付费app中银行账户信息时注意
  14. NTP网络校时(北斗卫星授时设备)技术核心源码让网络时间同步不再难
  15. 6-6 Isleap (5 分)
  16. Android ART dex2oat 加载加速浅析
  17. 在Ubuntu 14.04下安装Pepper Flash
  18. v-for的四种使用方法
  19. 2019牛客暑假多校训练赛第七场C Governing sand(暴力)
  20. 使用树莓派搭建私人存储云盘

热门文章

  1. [导入]Nebula3学习笔记(3): Core Namespace
  2. Mac 连过的 WiFi 怎么查密码?看这→
  3. iOS隐私权限的设置
  4. Camtasia卡点相册视频教程
  5. 《交互式程序设计 第2版》一第2章 编程基础
  6. Linux入门: grep与egrep 知识总结
  7. Python核心编程学习日记之模块
  8. JSF----事件处理----实时事件
  9. typedef int Myfunc(const char *,const struct stat *,int)
  10. 「leetcode」35.搜索插入位置:每次遇到二分法,都是一看就会,一写就废