iOS 6分享列表——UIActivityViewController详解

在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网络编程与云端应用最佳实践》作者:关东升 @tony_关东升

时间: 2024-10-30 15:21:08

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

iOS UITableView 与 UITableViewController实例详解_IOS

很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名. UITableView 对象虽然只能显示一行数据,但是没有行数限制. •编写新的应用程序 JXHomepwner 应用 创建应用,填写基本信息 •UITableViewController UITableView 是视图.我们知道 模型-视图-控制器(Model-View-Controller),他是我们必须遵守的一种

iOS开发之表视图详解_IOS

本文详细介绍了表视图的用法.具体如下: 概述 表视图组成 表视图是iOS开发中最重要的视图,它以列表的形式展示数据.表视图又一下部分组成: 表头视图:表视图最上边的视图 表脚视图:表视图最下边的视图 单元格(cell):表视图中每一行的视图 节(section):由多个单元格组成,应用于分组列表 节头 节脚 表视图的相关类 UITableView继承自UIScrollView,且有两个协议:UITableViewDelegate和UITableViewDataSource.此外UITableVi

IOS中Json解析实例方法详解(四种方法)_IOS

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的iOS版本,可以使用第三方库来解析Json. 本文将介绍Tou

iOS中UIWebView的使用详解

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

iOS中SQLite数据库使用详解

使用SQLite数据库 创建数据库 创建数据库过程需要3个步骤: 1.使用sqlite3_open函数打开数据库: 2.使用sqlite3_exec函数执行Create Table语句,创建数据库表: 3.使用sqlite3_close函数释放资源. 这个过程中使用了3个SQLite3函数,它们都是纯C语言函数,通过Objective-C去调用C函数当然不是什么问题,但是也要注意Objective-C数据类型与C数据类型兼容性问题. 下面我们使用SQLite技术实现备忘录案例,与属性列表文件实现

iOS百度地图简单使用详解_IOS

百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索.路径规划.地图标注.离线地图.定位.周边雷达等丰富的LBS能力 . 今天主要介绍以下接口 基础地图 POI检索 定位 首先配置环境 1.自动配置.framework形式开发包(使用CocoaPods)<推荐> 2.手动配置.framework形式开发包 特别注意: (API里有很多注意点,大家可以具体去看.但是我说的后两点少其中一个都会失败,第一点是有需求的话,必须加上)

iOS CoreData 增删改查详解_IOS

最近在学习CoreData, 因为项目开发中需要,特意学习和整理了一下,整理出来方便以后使用和同行借鉴.目前开发使用的Swift语言开发的项目.所以整理出来的是Swift版本,OC我就放弃了. 虽然Swift3 已经有了,目前整理的这个版本是Swift2 的.Swift 3 的话有些新特性. 需要另外调整,后续有时间再整理.  继承CoreData有两种方式:  创建项目时集成   这种方式是自动继承在AppDelegate里面,调用的使用需要通过UIApplication的方式来获取AppDe

IOS中的各种Picker详解

简述 在应用的一些设置中经常要用到一些Picker来快速帮助用户选定取值,一般会用到的有 UIDatePicker,UIPickerView以及UIImagePickerController. 初始界面 如图,在搭建好的界面,实现方法来完成各个选择.首先是日期选择 UIDatePicker 主要需要设置的属性有 locale datePickerMode UIDatePicker *datePicker = [[UIDatePicker alloc] init]; datePicker.loca

iOS开发入门:Passbook详解与开发案例

Passbook是iOS 6的新功能,只能在iPhone和iPod touch设备中使用.它可以帮助我们管理商家发放的电子会员卡.积分卡.优惠券等.这将对未来电子商务产生深远的影响.商家通过发放会员卡.积分卡.优惠券等,提高与消费者的互动,吸引人们更多消费.Passbook的诞生,正是为了将所有这些"卡"和"券"电子化,存放在iPhone或iPod touch里. Passbook与Pass iOS 6中的Passbook能够帮助我们集中管理电子"卡&qu