ios – 定制UIActivity的主题

ios – 定制UIActivity的主题,第1张

概述如何指定自定义UIActivity支持主题? UIActivityItemSource协议的文档提到您可以实现可选的activityViewController:subjectForActivityType:selector,如果您希望源代码提供主题: When posting an item the service may provide for a separate subject field 如何指定自定义UIActivity支持主题?

UIActivityItemSource协议的文档提到您可以实现可选的activityVIEwController:subjectForActivityType:selector,如果您希望源代码提供主题:

When posting an item the service may provIDe for a separate subject fIEld and data fIEld,such as an email message. Implement this method if you wish to provIDe a subject fIEld for services that support one.

但是,据我所知,在任何地方都没有记录我如何实际指定我的自定义UIActivity支持主题.这是怎么做到的?

编辑:让我的问题更清晰

假设我有一个自定义活动项源,比如实现UIActivityItemSource协议的documentActivityItemSource,我有一个自定义UIActivity,我们可以调用SenDWithFooMessageActivity.

然后我启动了一个UIActivtyVIEwController:

NSArray *activityItems = @[[[documentActivityItemSource alloc] initWithdocument: document]];NSArray *applicationActivitIEs = @[[[SenDWithFooMessageActivity alloc] init]];UIActivityVIEwController *activityVIEwController = [[UIActivityVIEwController alloc] initWithActivityItems:activityItems                                                                                     applicationActivitIEs:applicationActivitIEs];[parentVIEwController presentVIEwController:activityVIEwController                                   animated:YES                                 completion:nil];

现在,在d出窗口中我选择SenDWithFooMessageActivity.然后,活动控制器将在documentActivityItemSource实例上调用activityVIEwController:itemForActivityType:以获取一个项,然后通过调用该对象prepareWithActivityItems:方法将其转发到SenDWithFooMessageActivity.

通常,活动项目将是图像,字符串或URL.在这种情况下,假设documentActivityItemSource返回一个字符串,其中包含有关文档的现有模糊信息.然后,SenDWithFooMessageActivity可以将此文本用作其foo-mail消息的正文.

但是,Foo消息还要求主题有效.有趣的是,UIActivityItemSource协议还包含可选的activityVIEwController:subjectForActivityType:实际上是为了提供支持一个服务的主题.

对于Apple提供的电子邮件活动,这确实发生了 – 在documentActivityItemSource上调用activityVIEwController:subjectForActivityType:并且结果在电子邮件中用作主题.

但是,似乎没有办法指定我的自定义SenDWithFooMessageActivity还想从activityitem获取主题?文档提到这种情况发生在“支持[一个主题]的服务” – 那么我如何指定我的服务实际上支持一个.

此外,activityVIEwController也是如此:thumbnailImageForActivityType:suggestedSize :,它应该为“支持一个的服务”提供缩略图.这适用于默认的ShareOnTwitter和ShareOnFacebook活动,但似乎没有办法让自定义活动支持它.这可能吗?

到目前为止,我已经使用了@chriszumberge在下面提供的解决方法,即将activityVIEwController短路并使用itemsource所需的信息直接初始化自定义活动:

[SenDWithFooMessageActivity alloc] initWithSubject: document.Title];

但这似乎并不是整个UIActivityVIEwController设置应该被使用的方式.

解决方法 我建议:

UIActivityVIEwController *activityVC = [[UIActivityVIEwController alloc]     initWithActivityItems:@[@"Info you're emailing out."] applicationActivitIEs:nil];[activityVC setValue:@"Custom Email Subject Here" forKey:@"subject"];

但是,由于您使用的是自定义UIActivity并且似乎正在使用电子邮件,因此我假设您正在使用MFMailComposeVIEwController发送电子邮件.

在这种情况下,我将在您的自定义UIActivityItemProvIDer中为主题字符串创建一个属性,并将其设置为您启动自定义UIActivity并将其传递给UIActivityVIEwController的任何方法.在提供程序中,您可以创建一个字典,并为您希望的任何键值设置主题字符串

– (ID)activityVIEwController:(UIActivityVIEwController *)activityVIEwController itemForActivityType:(Nsstring *)activityType

方法.

从那里,在您的自定义UIActivity中,您可以将主题作为字典存储在 – (UIVIEwController *)activityVIEwController方法中,并且在同一方法中使用下面的代码初始化电子邮件并设置主题.

MFMailComposeVIEwController *mailCVC = [[MFMailComposeVIEwController alloc] init];mailCVC.mailComposeDelegate = self;[mailCVC setSubject:theSubject];[mailCVC setMessageBody:themessage isHTML:NO];[mailCVC addAttachmentData:theData mimeType:@"text/csv" filename:thefilename];

编辑

UIActivityItemProvder协议定义了UIActivityVIEwController对象用于检索要处理的数据项的方法(直接来自Apple文档).
activityVIEwController:subjectForActivityType:方法是UIActivityItemSource协议的一部分.

默认情况下,您的自定义UIActivityItemProvIDer符合UIActivityItemSource协议.这就是您需要实现subjectForActivityType:方法的地方.

然后,您可以使用switch / case语句或一堆if语句来确定自定义UIActivity的activityTitle方法中定义的传入[activityType isEqualToString:@“Custom UIActivity Title”].如果是这样,那么返回主题字符串应该是什么.但这需要在您的自定义UIActivityItemProvIDer子类中.

总结

以上是内存溢出为你收集整理的ios – 定制UIActivity的主题全部内容,希望文章能够帮你解决ios – 定制UIActivity的主题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1024607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存