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. 批处理SQL语句

    作用:想发送多条SQL,又要降低与数据库系统的交互,这时使用批处理        一]Statement对象——适合对不同结构的SQL语句进行批处理操作        步骤:            1 ...

  2. pywin32 安装错误 ImportError: DLL load failed: 不是有效的 Win32 应用程序

    pywin32 安装错误 ImportError: DLL load failed:  不是有效的 Win32 应用程序. 发现是因为没有制定Pywin32的dll所致,我们在用Pywin32开发时, ...

  3. linux sar查看网络流量

    sar -n DEV 1 10 -n { keyword [,...] | ALL } Report network statistics. IFACE Name of the network int ...

  4. Hadoop集群上使用JNI,调用资源文件

    hadoop是基于java的数据计算平台,引入第三方库,例如C语言实现的开发包将会大大增强数据分析的效率和能力. 通常在是用一些工具的时候都要用到一些配置文件.资源文件等.接下来,借一个例子来说明ha ...

  5. Jsensation | 氪加

    Jsensation | 氪加 www.jsensation.com

  6. 基于PCA和SVM的人脸识别系统-error修改

    ------------------------------------------------- Undefined function or variable 'W'. Error in class ...

  7. hdu 5410 CRB and His Birthday(混合背包)

    Problem Description Today is CRB's birthday. His mom decided to buy many presents for her lovely son ...

  8. 源码分析之spring-JdbcTemplate日志打印sql语句

    对于开源的项目来说的好处就是我们遇到什么问题可以通过看源码来解决. 比如近期有个同事问我说,为啥JdbcTemplate中只有在Error的时候才打印出sql语句呢.我一想,这和log的配置有关系吧. ...

  9. oracle 同样数据删除(仅仅留一条)

    DELETE FROM reg_user t1 WHERE user_name='9527008' and rowid > ( SELECT min(rowid) FROM location t ...

  10. ssh命令

    使用ssh命令登陆远程系统 ssh [ip/address] -l [登陆用户名] 如: ssh www.xyz.cn -l root