zoukankan      html  css  js  c++  java
  • 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 

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

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

  • 相关阅读:
    对象
    函数3
    函数2-作用域
    事件的分类
    函数1
    简单了解JSON Web令牌(JWT)
    Pycharm激活码,2020年9月29日最新激活码
    Python基础学习之常用模块
    python详细图像仿射变换讲解
    Python如何快速复制序列?
  • 原文地址:https://www.cnblogs.com/hereiam/p/3813881.html
Copyright © 2011-2022 走看看