iOS 6分享列表——UIActivityViewController详解

2013-06-03 01:42:33     发表评论

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

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

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

内置活动列表项

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

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

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

- (IBAction)shareAction:(id)sender { 

NSString *textToShare = @”请大家登录《iOS云端与网络通讯》服务网站。”; ① 

UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; ② 

NSURL *urlToShare = [NSURL URLWithString:@"http://www.iosbook3.com"]; ③ 

NSArray *activityItems = @[textToShare, imageToShare, urlToShare];       ④ 

UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems 

applicationActivities:nil];  ⑤ 

//不出现在活动项目 

activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, 

UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll]; ⑥ 

[self presentViewController:activityVC animated:TRUE completion:nil];  ⑦ 

}

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

自定义活动列表项

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

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

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

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

- (IBAction)shareAction:(id)sender { 

NSURL *urlToShare = [NSURL URLWithString:@"http://iosshare.cn/"]; ① 

NSArray *activityItems = @[urlToShare]; 

BookActivity *bookActivity = [BookActivity new];  ② 

NSArray *applicationActivities = @[bookActivity]; 

UIActivityViewController *activityVC = [[UIActivityViewController alloc] 

initWithActivityItems:activityItems 

applicationActivities:applicationActivities];  ③ 

[self presentViewController:activityVC animated:YES completion:nil]; 

}

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

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

#import <UIKit/UIKit.h> 

@interface BookActivity : UIActivity 

@property (nonatomic,strong) NSURL *url; 

@end

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

@implementation BookActivity 

- (NSString *)activityType  { 

return NSStringFromClass([self class]); ① 

} 

- (NSString *)activityTitle { 

return NSLocalizedStringFromTable(@”Open Book”, @”BookActivity”, nil);  ② 

} 

- (UIImage *)activityImage { 

return [UIImage imageNamed:@"Book"]; ③ 

} 

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { 

for (id activityItem in activityItems) { ④ 

if ([activityItem isKindOfClass:[NSURL class]]) { ⑤ 

if ([[UIApplication sharedApplication] canOpenURL:activityItem]) { ⑥ 

return YES; 

} 

} 

} 

return NO; 

} 

- (void)prepareWithActivityItems:(NSArray *)activityItems { 

for (id activityItem in activityItems) { 

if ([activityItem isKindOfClass:[NSURL class]]) { ⑦ 

_url = activityItem;  ⑧ 

} 

} 

} 

- (void)performActivity { 

BOOL completed = [[UIApplication sharedApplication] openURL:_url];  ⑨ 

[self activityDidFinish:completed];  ⑩ 

} 

@end

iOS 6分享列表——UIActivityViewController详解的更多相关文章

  1. iOS 开发之照片框架详解(2)

    一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...

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

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

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

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...

  4. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  5. iOS百度地图简单使用详解

    iOS百度地图简单使用详解 百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索.路径规划.地图标注.离线地图.定位.周边雷达等丰 ...

  6. iOS 视图控制器转场详解

    iOS 视图控制器转场详解 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标有了大幅度的增长,多谢唐巧前辈的推荐.有些人问我相关的问题 ...

  7. Linux "ls -l"文件列表权限详解

    ls Linux "ls -l"文件列表权限详解 1.使用 ls -l 命令 执行结果如下(/var/log) : drwxr-x--- root adm -- : apache2 ...

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

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

  9. IOS数据库操作SQLite3使用详解(转)

    iPhone中支持通过sqlite3来访问iPhone本地的数据库.具体使用方法如下1:添加开发包libsqlite3.0.dylib首先是设置项目文件,在项目中添加iPhone版的sqlite3的数 ...

随机推荐

  1. Caffe : Layer Catalogue(1)

    原文:http://caffe.berkeleyvision.org/tutorial/layers.html 参考:http://blog.csdn.net/u011762313/article/d ...

  2. ESM CORR

    http://infosecnirvana.com/arcsight-corr-install/ http://www.softpanorama.org/Admin/Event_correlation ...

  3. pfsense 2.2RC下的L2TP配置

    还不有测试完成,不过,基本上应该差不多了. 主要参考以下文档: http://blog.sina.com.cn/s/blog_541a3cf10101ard3.html http://thepract ...

  4. Delphi - GetUserNameEx(学一下导出Windows API,以及Array Char充当缓冲区的用法,下标必须从零开始)

    (* * Author : http://www.michael-puff.de * Date : 2006-03-29 * License : PUBLIC DOMAIN *) function G ...

  5. WCF的执行过程

    既然是实现互通信.那么肯定会有概念意义上的服务端Server  和概念意义上的客户端 Client,在这里,我所说明的都是概念意义上的,单独强调此,是因为,基于WCF的通信没有物理上的划分,但是概念上 ...

  6. #include"*.c" 文件问题

    一般我们学习C语言的时候,include预编译的一般是.h头文件,虽然来说#include却是可以包含任意扩展名的文件,因为考虑到接口与实现分离的问题,头文件里面一般放函数,变量等声明,大家一般都推荐 ...

  7. BZOJ1270: [BeijingWc2008]雷涛的小猫

    1270: [BeijingWc2008]雷涛的小猫 Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 836  Solved: 392[Submit][ ...

  8. 【转】android service 之二(IntentService)

    原文网址:http://rainbow702.iteye.com/blog/1143286 不管是何种Service,它默认都是在应用程序的主线程(亦即UI线程)中运行的.所以,如果你的Service ...

  9. Bootstrap风格登录界面设计样例

    参考:http://bootsnipp.com/tags/login Register Page   127.8K 187 Modal Login with jQuery Effects   159. ...

  10. You don't have permission to access / on this server for debian_8

    Forbidden You don't have permission to access / on this server. Apache/2.4.10 (Debian) Server at www ...