UIActivityViewController

UIActivityViewController类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务。

系统提供了一些通用的标准服务,例如拷贝内容至粘贴板、发布一个公告至社交网、通过email或者SMS发送内容。

应用程序同样可以自定义服务。(我的微信分享就属于自定义服务, 之后将会写一篇教程介绍)

你的应用程序负责配置、展现和解雇这个view controller。

viewcontroller的配置涉及到viewcontroller需要用到的具体的数据对象。(也可以指定自定义服务列表,让应用程序支持这些服务)。

在展现view controller时,必须根据当前的设备类型,使用适当的方法。在iPad上,必须通过popover来展现view controller。在iPhone和iPodtouch上,必须以模态的方式展现。

一。UIActivityViewController 类参考

继承自

UIViewController : UIResponder : NSObject

符合

NSCoding (UIViewController)

UIAppearanceContainer (UIViewController)

NSObject (NSObject)

框架

/System/Library/Frameworks/UIKit.framework

可用性

iOS6以及之后

声明在

UIActivityViewController.h

二。初始化Activity View Controller

- (id)initWithActivityItems:(NSArray *)activityItems applicationActivities:(NSArray *)applicationActivities;

根据指定的数据初始化并返回一个新的activity view controller。

参数

1.activityItems

在执行activity中用到的数据对象数组。数组中的对象类型是可变的,并依赖于应用程序管理的数据。例如,数据可能是由一个或者多个字符串/图像对象,代表了当前选中的内容。

2.applicationActivities

是一个UIActivity对象的数组,代表了应用程序支持的自定义服务。这个参数可以是nil。

返回值

返回一个将要展现的activity view controller。

使用示例

NSString *textToShare = @"要分享的文本内容";UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"];NSURL *urlToShare = [NSURL URLWithString:@"http://blog.csdn.net/hitwhylz"];NSArray *activityItems = @[textToShare, imageToShare, urlToShare];UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];

三。访问Completion Handler

@property(nonatomic,copy) UIActivityViewControllerCompletionHandler completionHandler;// set to nil after call
typedef void (^UIActivityViewControllerCompletionHandler)(NSString *activityType, BOOL completed);

当activityview controller被解雇时,completion handler会被执行。这可以用来处理当使用完activityview controller之后, 执行的一些相关操作。

不管是点击了“cancel”, 还是选中了某项服务,当它结束后,都会调用这个块,并且能捕抓到你选中的服务,来执行相关操作。

block的参数如下:

1.activityType

被用户选择的服务类型。如果是自定义的服务,这个值是由UIActivity对象的方法activityType返回的。如果是系统定义的activities,这个值是一个在UIActivity类参考中”Built-inActivity Types”列出来的字符串。

2.completed

如果服务被执行了,则返回YES,如果没有则返回NO。当用户没有选择一个服务,而是解雇了view controller,这个参数同样被设置为NO。

使用示例

//给activityVC的属性completionHandler写一个block。	//用以UIActivityViewController执行结束后,被调用,做一些后续处理。	UIActivityViewControllerCompletionHandler myBlock = ^(NSString *activityType,BOOL completed)	{		NSLog(@"activityType :%@", activityType);		if (completed)		{			NSLog(@"completed");		}		else		{			NSLog(@"cancel");		}				//放回上一级界面		[self.navigationController dismissModalViewControllerAnimated:YES];			};		// 初始化completionHandler,当post结束之后(无论是done还是cancell)该blog都会被调用	activityVC.completionHandler = myBlock;

四。excludedActivityTypes属性

@property(nonatomic,copy)NSArray *excludedActivityTypes

默认情况下,UIActivityViewController 将显示所有可用于所提供内容的服务,但我们也可以排除特定的 Activity 类型。

这就要利用excludedActivityTypes属性了,它可以声明我们不要显示出来的服务列表。

Activity 类型又分为“操作”和“分享”两大类, 具体看名称就能区分了。

UIKIT_EXTERN NSString *const UIActivityTypePostToFacebook NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePostToTwitterNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePostToWeiboNS_AVAILABLE_IOS(6_0);// SinaWeiboUIKIT_EXTERN NSString *const UIActivityTypeMessageNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeMail NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypePrintNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeCopyToPasteboard NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeAssignToContactNS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeSaveToCameraRoll NS_AVAILABLE_IOS(6_0);UIKIT_EXTERN NSString *const UIActivityTypeAddToReadingList NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToFlickr NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToVimeoNS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypePostToTencentWeibo NS_AVAILABLE_IOS(7_0);UIKIT_EXTERN NSString *const UIActivityTypeAirDropNS_AVAILABLE_IOS(7_0);

每个 Activity 类型都支持好多种不同的数据类型。例如,一条 Tweet 可能由 NSString 以及一个附加的图像 和/或 URL 所组成。

不同的 Activity 类型所支持的数据类型如下:

使用示例

//排除类型,不显示 default is nil. activity types listed will not be displayedactivityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint];

五。展示

在展现view controller时,必须根据当前的设备类型,使用适当的方法。在iPad上,必须通过popover来展现view controller。在iPhone和iPodtouch上,必须以模态的方式展现。

使用示例

//以模态的方式展现activityVC。[self presentViewController:activityVC animated:YES completion:nil];

展示之后, 你看到的效果图大概是这样:

这里的那些分享功能(Facebook, Twitter, 新浪微博, 腾讯微博...)需要你在手机上绑定了登录账户, 才能正常显示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值