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界面。