iOS 6分享列表——UIActivityViewController详解

简介: <p>在iOS 6之后提供了一个分享列表视图,它通过UIActivityViewController管理。苹果设计它主要的目的是替换分享动作选单(ActionSheet),分享动作选单是出于分享目的的动作选单。</p><p align="center"><span id="more-136"></span><a href="http://www.iosbook3.com/wp-content

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

1

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

2

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

内置活动列表项

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

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

3

我们下面介绍一下代码实现部分,代码参考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网站。

4

我们下面介绍一下代码实现部分,代码参考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_关东升

目录
相关文章
|
30天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
84 3
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
39 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
91 2
|
3月前
|
API 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
iOS 开发高效率工具包:10 大必备工具
47 1
|
3月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
52 1
|
5天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
9 0
|
20天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
192 2
|
3月前
|
数据可视化 iOS开发
iOS 开发,什么是 Interface Builder(IB)?如何使用 IB 构建用户界面?
iOS 开发,什么是 Interface Builder(IB)?如何使用 IB 构建用户界面?
40 4