IOS/Objective-C:UIActivityViewController:针对不同的Activity类型进行自定义
Posted
技术标签:
【中文标题】IOS/Objective-C:UIActivityViewController:针对不同的Activity类型进行自定义【英文标题】:IOS/Objective-C: UIActivityViewController: Customize for different Activity Types 【发布时间】:2018-02-26 21:24:20 【问题描述】:我正在尝试自定义使用 UIActivityViewController
共享的内容。一些博客文章和answers on SO 中建议的方法是子类UIActivityItemProvider
,如下所示。一些答案还说该类应该采用协议UIActivityItemSource
,但我不清楚该协议与提供者有什么关系。
我的代码在一个视图控制器类中,我已经接受了 .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];
提前感谢您对我可能缺少的任何建议,以使其正常工作。
【问题讨论】:
你检查过this吗? 【参考方案1】:在使用initWithActivityItems:applicationActivities:
创建UIActivityViewController
时,您需要传递实现UIActivityItemSource
的类的一个或多个实例 - 请参阅文档here。视图控制器可能不是一个好的选择,我会改为制作专用对象来做到这一点。最终你的代码可能看起来像:
MySourceClass *mySource = [MySourceClass new];
NSArray *activityItems = @[mySource];
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:activityItems
applicationActivities:nil];
【讨论】:
我对新课程感到困惑。这是否意味着我需要使用 CMD n 创建一个全新的类,该类具有订阅协议并具有 subjectForActivityType 和类似方法的 mySource.h 和 mySource.m?否则,我使用的代码与您的代码相似——请参阅上面的编辑。它只是不按活动类型区分。 是的,这就是我推荐的。 我在 VC 中有很多方法可以做一些事情,比如为 URL 创建一个 .ics 文件。我将如何将所有这些传递给目标文件。通过给目标文件属性?如 mySource.url = URL?和 mysource.h 文件中的 URL 属性? [mySourceClass new] 给出错误:使用 initWithPlaceholderItem: 实例化 IDActivityItemProvider 的实例。我已将该方法放入类中,但调用 [mySourceClass initWithPlaceholderItem:@"string"] 未找到类方法错误以上是关于IOS/Objective-C:UIActivityViewController:针对不同的Activity类型进行自定义的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Objective-C:从 NSManagedObject 构建 NSDictionary
iOS/Objective-C:有啥方法可以查看安排了哪些 localNotifications? [复制]