您的位置:

UIActivityViewController的详细阐述

UIActivityViewController是iOS平台上一个常用的自带分享功能控制器。在社交媒体的流行下,用户分享的需求逐渐增多,而UIActivityViewController将多个社交平台和设备系统提供的分享途径整合在一起,方便用户快捷地分享内容。

一、初始化UIActivityViewController

UIActivityViewController的初始化非常简单,只需传入要分享的内容和分享途径就可以了。下面的代码演示了如何初始化一个分享图片的UIActivityViewController。

UIImage *image = [UIImage imageNamed:@"example.jpg"];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[image] applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];

上面的代码将一张名为example.jpg的图片加入了分享内容中,并且不使用自定义的应用活动。当然,开发者也可以自己实现UIActivityItemSource协议来自定义共享内容。

二、UIActivityItemSource协议的使用

UIActivityItemSource协议定义了共享内容的数据源和关于这些数据的元数据。当你的应用程序需要提供自定义数据(如HTML文档或自定义对象),并且可能需要更精细的控制共享过程时,你就可以采用这个协议。

下面是一个简单的示例代码,该代码实现了自定义的UIActivityItemSource对象,它通过实现协议的方法来返回要分享的内容和元数据。

@interface ExampleActivityItemSource : NSObject 
@end

@implementation ExampleActivityItemSource
- (id)itemForActivityType:(NSString *)activityType {
    return [NSURL URLWithString:@"http://www.example.com"];
}
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"";
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
    return @"Example";
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController dataTypeIdentifierForActivityType:(NSString *)activityType {
    return @"public.url";
}
@end

  

上面的代码通过ExampleActivityItemSource来提供一个URL并设置元数据,其中:

  • itemForActivityType: 方法返回一个URL,这将作为共享内容的实际内容。
  • activityViewControllerPlaceholderItem: 方法返回了一个空字符串,因为URL本身已经提供了一个“占位符”URL。
  • activityViewController:subjectForActivityType: 方法返回了一个主题字符串,它将作为邮件或信息等共享途径的主题,如果分享途径不接受设置主题的话,这个方法将不会执行。
  • activityViewController:dataTypeIdentifierForActivityType: 方法返回了所继承的数据类型的标识符,即public.url ,因为URL是要进行分享的内容。

三、UIActivityViewController的属性和委托

UIActivityViewController还有一些属性和委托方法,使开发者能够更细致的控制分享行为。下面将简要介绍一些常用的属性和委托方法。

1、UIActivityViewController的属性

下面是一些常用的UIActivityViewController属性:

  • excludedActivityTypes: 可以排除某些分享途径。默认情况下,UIActivityViewController显示所有可用的分享选项。如果需要排除某些分享途径,可以设置此属性,例子:activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAirDrop];
  • completionHandler: 是一个回调block,当用户完成分享时,这个回调将被调用。回调将有一个标识完成的布尔值和完成的活动类型数组。

2、UIActivityViewController的委托

下面是一些常用的UIActivityViewController委托方法:

  • activityViewController:didFinishWithActivityResult: 是一个可选的委托方法,当用户完成分享时,它会被调用。
  • activityViewControllerPlaceholderItem: 方法在数据对象为nil时提供一个占位符。
  • activityViewController:itemForActivityType: 方法与UIActivityItemSource协议的方法完全相同。
  • activityViewController:subjectForActivityType: 方法的作用与UIActivityItemSource协议中的方法相同,只是委托方法没有返回值,所以开发者只需在此方法中设置想要的内容。

下面是一个使用委托方法的示例,在用户完成分享时将所分享的内容写入日志文件中。

@interface ExampleActivityViewController : UIActivityViewController 
@end

@implementation ExampleActivityViewController
- (void)activityViewController:(UIActivityViewController *)activityViewController didFinishWithActivityResult:(UIActivityViewControllerResult)result {
    if (result == UIActivityViewControllerResultCancelled) {
        NSLog(@"Cancelled.");
    } else {
        NSLog(@"Success.");
    }
}
@end

  

结语

UIActivityViewController是一个非常便捷的分享控制器,不仅方便了用户的分享需求,而且也使得应用之间的互通变得更加便捷。在开发过程中,熟练掌握UIActivityViewController及其所支持的协议和委托,可以帮助开发者更好地实现自己的业务逻辑和UI界面。