16

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

虽然我可以理解为什么它会为不支持 html 内容的共享目标执行此操作,但它也不会将其解释为电子邮件之类的内容(以前可以通过将isHTML属性设置为YESon来完成MFMailComposeController)。

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

4

4 回答 4

54

在我的测试中,如果字符串以“<html><body>”开头并以“</body></html>”结尾,那么它将被视为 HTML。

如果您希望通过非 HTML 感知共享服务获得良好的结果,您需要改为使用实现UIActivityItemSource协议并在 from-activityViewControllerPlaceholderItem:和 from-activityViewController:itemForActivityType:活动时返回 HTML 字符串的对象UIActivityTypeMailnil否则返回 HTML 字符串。

如果活动不是(如果是) ,则返回合适的非 HTML 字符串的第二个UIActivityItemSource是难题的其余部分。-activityViewControllerPlaceholderItem:-activityViewController:itemForActivityType:UIActivityTypeMailnil

我建议不要让一个对象同时完成这两项工作,因为UIActivity引擎有权根据占位符项目是否显示为 HTML 做出不同的决定。

于 2012-11-06T14:50:07.113 回答
1

我没有尝试过任何这些,但是当我熟悉 UIActivityViewController 时,它们对于您的目标似乎是合理的。

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

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

希望这能给你一些想法。

于 2012-10-09T10:02:57.217 回答
1

您希望支持哪些活动?活动类型依赖于服务,并且定义非常明确。例如,服务无法知道字符串是纯文本还是标记文本——您可能想故意粘贴 HTML 代码。

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

于 2012-09-30T03:24:02.860 回答
0

您只需要确保 HTML 字符串的第一行是一个标签。

于 2012-10-17T16:26:42.900 回答