iOS 6分享列表——UIActivityViewController详解

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
时间: 2024-10-15 16:19:52

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

iOS开发 - UIActivityViewController详解

昨天在做微信分享的时候, 用到了这个东西.趁热写点东西记录下. UIActivityViewController类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务. 系统提供了一些通用的标准服务,例如拷贝内容至粘贴板.发布一个公告至社交网.通过email或者SMS发送内容. 应用程序同样可以自定义服务.(我的微信分享就属于自定义服务, 之后将会写一篇教程介绍) 你的应用程序负责配置.展现和解雇这个view controller. vie

【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】

转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成设置账户信息. 确定 ItunesConnect 里 “Contracts, Tax, and Banking”的状态,如下图所示,即可: 这里也是由于Himi疏忽的原因没有说明,这里先给童鞋们带来的麻烦,致以歉意. //——2012-6-25日更新iap恢复 看到很多童鞋说让Himi讲解如何恢复i

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

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo

iOS 证书与签名 解惑详解

iOS 证书与签名 解惑详解 分类: iPhone2012-06-06 19:57 9426人阅读 评论(1) 收藏 举报 iosxcodecryptographyappleiphone测试 目录(?)[+] 教程截图: 下面是一篇有澳洲墨尔本的一名全职iOS开发者提供的文章.他在论坛上是一个很摩登的年轻人 – Adam Eberbach. ·Bundle identifier ·provisioning profiles ·App ID ·certificate signing request

iOS中UIWebView的使用详解

iOS中UIWebView的使用详解 一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如我加载百度的主页:     UIWebView * view = [[UIWebView al

iOS网络编程(六) NSURLSession详解

昨夜浏览Demo的时候,看到别人请求网络数据用的是NSURLSession,当时就在想这里什么,怎么没有用过,引起了我的好奇心,遂去百度-谷歌-官方文档一一查看,有了一定的了解,原来NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的. 查找资料,写了一个小Demo,大家可以看看,有什么不足的地方,可以留言帮我指出来. // // HMTRootViewController.m // // // Created by HMT on 14-6-7.

iOS开发摇动手势实现详解

1.当设备摇动时,系统会算出加速计的值,并告知是否发生了摇动手势.系统只会运动开始和结束时通知你,并不会在运动发生的整个过程中始终向你报告每一次运动.例如,你快速摇动设备三次,那只会收到一个摇动事件. 2,想要实现摇动手势,首先需要使视图控制器成为第一响应者,注意不是单独的控件.成为第一响应者最恰当的时机是在视图出现的时候,而在视图消失的时候释放第一响应者. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -(BOOL)canBecomeFirstRespond

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS申请发布证书-图文详解(转载)

本文讲述发布证书的申请,申请真机调试证书请参考:http://my.oschina.net/joanfen/blog/167730 首先登陆https://developer.apple.com(99美元账号) 选择iOS Developer program 板块下的 Certificates,Identifiers & Profiles 点击进入 b.进入 c.选择证书类型 distribution,选择添加 d.点击+后,选择distribution->App Store and Ad