iOS UIActivityViewController简单使用

本文参考了关东升的博客http://2009315319.blog.51cto.com/701759/1195374

UIActivityViewController是iOS 6后,苹果用来替换actionsheet的新的控制器。功能有点类似以前的URL scheme。

在iOS上它以模态出现,而在iPad上则是popover。

苹果已经内置很多UIActivity。社交:天朝有微信微博,外国有推特Facebook。邮件,相机等。

使用也很简单。

一是为现有的UIActivity提供数据。让它们接收你传的数据,并显示相应的UI。这些数据可以是真实的字符串,图片以及URL,也可以是某些对象。作为数据提供者的对象,是有格式要求的,这个要求写在了UIActivityItemSource协议中。你只要实现这些协议方法,就能作为UIActivity的数据提供者了。苹果已经内置了一个实现这些方法的类UIActivityProvider。你可以使用它来简化一些操作。这边引用了一段代码:

[objc] view plaincopy在CODE上查看代码片派生到我的代码片
- (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];  ⑦   

}
分别给出了提供的真实数据以及所需的UIActivity。当然这边是采用不包含的方式进行的。

第二种是自定义自己的UIActivity。这边和前边的很类似,不过这边有个自定义的UIActivity。

[objc] view plaincopy在CODE上查看代码片派生到我的代码片

- (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];   

}   

既然是自定义的,那么也需要能够处理你传入的数据。UIActivity是一个抽象类,你要使用它的子类,因此你需要继承它,而继承它的同时你又覆盖它的一些方法,来提供对处理这些数据的支持。
打开UIActivity文档,你会发现一些有意思的东西。一个UIActivity的分类包括UIActivityCategoryAction和UIActivityCategoryShare两种。而它的类型一般就是我们的UIActivity名。还需要提供标题和图片。另外的一些方法,看起来有点代理时候的意思。

  • (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
    指明了我们的应用能否对数据源数组作出回应。似乎有点麻烦,整个数组既可以是一组不同类型数据组成的一项,也可以是满足数据提供者的一个数据。如果是真实数据,我们只需要看看数组中有没有我们要处理的数据类型。如果是提供者,我们也得检查下它是否提供了我们关心的数据。

  • (void)prepareWithActivityItems:(NSArray *)activityItems
    这是在回应点击消息前的一些准备,譬如你要处理下数据,再做反应。这时候可以把关键的数据存起来。

  • (void)performActivity
    这时候就真的进行回应了。

还有什么没讲到?
想在你的程序回应之后做点事?

那就覆盖- (void)activityDidFinish:(BOOL)completed;使用completed来判断是否完成回应。

想在UIActivityViewController消失的时候做点啥?

那就用下这个属性 completionHandler。

差不多了吧。或者你也可以去看看汤普森的著名博客http://nshipster.com/uiactivityviewcontroller/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值