iOS 6分享列表——UIActivityViewController详解

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

1

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

2

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

内置活动列表项

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

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

3

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

[cpp]  view plain copy
  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.   
  23. }  


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

自定义活动列表项

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

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

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

4

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

[cpp]  view plain copy
  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.   
  19. }  


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

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

[cpp]  view plain copy
  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的代码如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值