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。你可以使用它来简化一些操作。这边引用了一段代码:

    - (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。

    - (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/


你可能感兴趣的:(UIActivityViewController简单使用)