UIActivityViewController与HTML

当我将包含HTML内容的string作为数组元素传递给UIActivityViewController initWithActivityItems方法时,它不会在select的“共享”控制器中将其显示为HTML,而是呈现HTML源代码(即标记而不是解释它)。

虽然我可以理解为什么它会为不支持html内容的共享目标执行此操作,但是它不会解释它是否包含电子邮件,这些操作(之前会通过将isHTML属性设置为YES MFMailComposeController )。

我应该浪费时间创build一个UIActivityItemProvider ,它返回基于“活动types”的自定义内容,或者真的没有办法让UIActivityViewController提供的邮件控制器将内容解释为HTML吗?

你希望支持哪些活动? 活动types取决于服务,而且它们非常清晰 。 服务无法知道string是纯文本还是标记文本 – 例如,您可能需要粘贴HTML代码。

你总是可以用老式的方式来做事,把纯文本和HTML复制到粘贴板上,或者直接调用邮件编辑器,或者你想要完成的任何事情。

在我的testing中,如果string开始“<html> <body>”并结束“</ body> </ html>”,那么它将被视为HTML。

如果您希望使用不支持HTML的共享服务获得良好结果,则需要使用实现UIActivityItemSource协议的对象,并在从-activityViewControllerPlaceholderItem:-activityViewController:itemForActivityType:返回HTMLstring-activityViewController:itemForActivityType:如果活动是UIActivityTypeMail ,否则nil

第二个UIActivityItemSource从-activityViewControllerPlaceholderItem:返回合适的非HTMLstring-activityViewControllerPlaceholderItem: -activityViewController:itemForActivityType:如果活动不是UIActivityTypeMail (如果是,则nil )是其余部分。

我build议不要让一个对象同时执行两个任务,因为UIActivity引擎有权根据占位符项是否为HTML来做出不同的决定。

我还没有尝试过其中的任何一种,但是在熟悉UIActivityViewController的时候,他们对于你的目标似乎是合理的。

1)您可以将HTML源代码写入本地文件,例如my_mail_message.html ,然后使用该文件构buildNSURL对象,例如[NSURL URLWithString:@"file://my_mail_message.html"] ,然后使用NSURL对象作为您提供给initWithActivityItems:applicationActivities:activityItems数组的元素。

2)如果你知道预期的接收者,例如foo@example.com ,你可以用mailtoscheme和HTML源代码构build一个NSURL对象,如下所示: mailto:foo@example.com?body={my HTML source goes here} 。 你应该省略大括号{} 。 和以前一样,您应该使用该NSURL对象作为activityItems数组的一个元素。

希望这给你一些想法。

你只需要确保HTMLstring的第一行是一个标签。