IOS/Objective-C: UIActivityViewController: 为不同的 Activity 类型定制
IOS/Objective-C: UIActivityViewController: Customize for different Activity Types
我正在尝试自定义使用 UIActivityViewController
共享的内容。一些博文和answers on SO中建议的方法是subclass UIActivityItemProvider
如下。一些答案还说 class 应该采用协议 UIActivityItemSource
但我不清楚协议与提供者有什么关系。
我的代码在视图控制器 class 中,我已经在 .h 文件中接受了 <UIActivityItemSource Protocol>
。我还在 .m 文件中放置了以下方法以及用于消息、占位符、URL 和缩略图的类似方法。但是,它们对共享的内容没有任何影响,所有类型、消息、电子邮件、Facebook 等都相同。
我错过了什么?
-(NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(UIActivityType)activityType
{
if (activityType == UIActivityTypeMessage) {
return @"My message subject";
} else if (activityType == UIActivityTypeMail) {
return @"My mail subject";
}
return @"My subject otherwise";
}
编辑:
以下代码可以很好地向不同的活动发送相同的内容。但是上面的方法显然是需要定制的:
NSArray *activityItems = @[text,url];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems: activityItems applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypePostToWeibo,UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeSaveToCameraRoll];
[activityViewController setValue:_dare.shtodo forKey:@"Did you see this?"];
[self presentViewController:activityViewController animated:YES completion:nil];
提前感谢您就我可能缺少的内容提出任何建议,以使其正常工作。
在使用 initWithActivityItems:applicationActivities:
创建 UIActivityViewController
时,您需要传递实现 UIActivityItemSource
的 class 的一个或多个实例 - 请参阅文档 here .视图控制器可能不是一个好的选择,我宁愿制作专门的对象来做这件事。最终您的代码可能类似于:
MySourceClass *mySource = [MySourceClass new];
NSArray *activityItems = @[mySource];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:activityItems
applicationActivities:nil];
我正在尝试自定义使用 UIActivityViewController
共享的内容。一些博文和answers on SO中建议的方法是subclass UIActivityItemProvider
如下。一些答案还说 class 应该采用协议 UIActivityItemSource
但我不清楚协议与提供者有什么关系。
我的代码在视图控制器 class 中,我已经在 .h 文件中接受了 <UIActivityItemSource Protocol>
。我还在 .m 文件中放置了以下方法以及用于消息、占位符、URL 和缩略图的类似方法。但是,它们对共享的内容没有任何影响,所有类型、消息、电子邮件、Facebook 等都相同。
我错过了什么?
-(NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(UIActivityType)activityType
{
if (activityType == UIActivityTypeMessage) {
return @"My message subject";
} else if (activityType == UIActivityTypeMail) {
return @"My mail subject";
}
return @"My subject otherwise";
}
编辑:
以下代码可以很好地向不同的活动发送相同的内容。但是上面的方法显然是需要定制的:
NSArray *activityItems = @[text,url];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems: activityItems applicationActivities:nil];
activityViewController.excludedActivityTypes = @[UIActivityTypePostToWeibo,UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeSaveToCameraRoll];
[activityViewController setValue:_dare.shtodo forKey:@"Did you see this?"];
[self presentViewController:activityViewController animated:YES completion:nil];
提前感谢您就我可能缺少的内容提出任何建议,以使其正常工作。
在使用 initWithActivityItems:applicationActivities:
创建 UIActivityViewController
时,您需要传递实现 UIActivityItemSource
的 class 的一个或多个实例 - 请参阅文档 here .视图控制器可能不是一个好的选择,我宁愿制作专门的对象来做这件事。最终您的代码可能类似于:
MySourceClass *mySource = [MySourceClass new];
NSArray *activityItems = @[mySource];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:activityItems
applicationActivities:nil];