iOS 6分享列表——UIActivityViewController详解

简介:

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

1

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

2

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

内置活动列表项

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

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

3

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

 

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

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

自定义活动列表项

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

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

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

4

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

 

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

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

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

 

 
  1. #import <UIKit/UIKit.h> 
  2.  
  3.   
  4.  
  5. @interface BookActivity : UIActivity 
  6.  
  7.   
  8.  
  9. @property (nonatomic,strong) NSURL *url; 
  10.  
  11.   
  12.  
  13. @end 

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

 

 
  1. @implementation BookActivity 
  2.  
  3.   
  4.  
  5. - (NSString *)activityType  { 
  6.  
  7. return NSStringFromClass([self class]); ① 
  8.  
  9.  
  10.   
  11.  
  12. - (NSString *)activityTitle { 
  13.  
  14. return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil);  ② 
  15.  
  16.  
  17.   
  18.  
  19. - (UIImage *)activityImage { 
  20.  
  21. return [UIImage imageNamed:@"Book"]; ③ 
  22.  
  23.  
  24.   
  25.  
  26. - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { 
  27.  
  28. for (id activityItem in activityItems) { ④ 
  29.  
  30. if ([activityItem isKindOfClass:[NSURL class]]) { ⑤ 
  31.  
  32. if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥ 
  33.  
  34. return YES; 
  35.  
  36.  
  37.  
  38.  
  39. return NO; 
  40.  
  41.  
  42.   
  43.  
  44. - (void)prepareWithActivityItems:(NSArray *)activityItems { 
  45.  
  46. for (id activityItem in activityItems) { 
  47.  
  48. if ([activityItem isKindOfClass:[NSURL class]]) { ⑦ 
  49.  
  50. _url = activityItem;  ⑧ 
  51.  
  52.  
  53.  
  54.  
  55.   
  56.  
  57. - (void)performActivity { 
  58.  
  59. BOOL completed = [[UIApplication sharedApplication] openURL:_url];  ⑨ 
  60.  
  61. [self activityDidFinish:completed];  ⑩ 
  62.  
  63.  
  64. @end 

本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1195374,如需转载请自行联系原作者

相关文章
|
5月前
|
JSON 小程序 Android开发
小程序列表左滑效果在IOS呈上下滑动影响样式
小程序列表左滑效果在IOS呈上下滑动影响样式
97 0
|
7月前
|
iOS开发
iOS UIKit Dynamics Demo 学习地址列表
iOS UIKit Dynamics Demo 学习地址列表
23 0
|
iOS开发
iOS开发-聊天气泡的绘制和聊天消息列表
iOS开发-聊天气泡的绘制和聊天消息列表
168 0
iOS开发-聊天气泡的绘制和聊天消息列表
|
安全 iOS开发 开发者
ios应用列表调整后排名规则
ios应用列表调整后排名规则
|
程序员 iOS开发
iOS 列表 UITableView 提速指南
从08年到现在开发过的iOS应用不计其数了,但是面试很多人的时候,发现依然很多同学在最基本的列表控件上懂得不够深,下面就结合各方面的资料进行再一次讲解。 我们都知道纯代码是效率最高的,但是在开发成本上已经越来越不如使用Storyboard性价比高,速度快,所以本文试图结合UIStoryboard来描述一整套方案。
140 0
iOS 列表 UITableView 提速指南
|
数据处理 iOS开发 开发者
iOS开发中活动视图控制器UIActivityViewController的应用
iOS开发中活动视图控制器UIActivityViewController的应用
313 0
iOS开发中活动视图控制器UIActivityViewController的应用
|
缓存 算法 iOS开发
iOS性能优化系列篇之“列表流畅度优化”
原文作者:Hello_Vincent原文地址:https://juejin.im/post/5b72aaf46fb9a009764bbb6a#heading-1 这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化。
1385 0
|
iOS开发 开发者
直播APP开发之iOS开发中的列表优化思路
APP开发中,列表可能是平时我们打交道最多的UI控件之一,其重要性不言而喻,对其性能的优化同样至关重要。而对于iOS开发,列表就是我们常说的UITableView / UICollectionView。在进行直播APP开发时针对于列表的优化自然是必不可少的。
1547 0
|
iOS开发
【iOS 开发】Xcode9 自动签名更新设备列表
内测分发测试 iOS App 的时候,在 https://developer.apple.com/account/ios/device/ 添加了设备的 UDID 之后,往往 Xcode 这边不会及时同步信息,提供一个解决办法: 去 ~/Library...
1152 0