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

虽然我可以理解为什么它会对不支持html内容的共享目标执行此操作,但它也不会对电子邮件等内容进行解释(以前这将通过设置 isHTML 物业至 YESMFMailComposeController).

我应该浪费我的时间创建一个 UIActivityItemProvider 这将返回基于"活动类型"的自定义内容,或者真的没有办法获得由 UIActivityViewController 将内容解释为HTML?

有帮助吗?

解决方案

您希望支持哪些活动?活动类型依赖于服务,它们非常漂亮 明确界定.例如,服务无法知道字符串是纯文本或标记文本-您可能想要故意粘贴HTML代码。

你总是可以用老式的方式做一些事情,将纯文本和HTML复制到白板上,或者直接调用邮件作曲家,或者任何你想完成的事情。

其他提示

在我的测试中,如果字符串开始"<html><body>"和结束"</body></html>"然后它被视为HTML。

如果您希望使用非HTML感知共享服务获得良好结果,则需要使用实现 UIActivityItemSource 协议并返回html字符串时,从 -activityViewControllerPlaceholderItem: 而从 -activityViewController:itemForActivityType: 如果活动是 UIActivityTypeMailnil 否则。

一秒钟 UIActivityItemSource 返回一个合适的非HTML字符串 -activityViewControllerPlaceholderItem: 而从 -activityViewController:itemForActivityType: 如果活动不是 UIActivityTypeMail (和 nil 如果是)是拼图的其余部分。

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

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

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

2)如果您知道预期的收件人,例如, foo@example.com, ,你可能会建立一个 NSURL 反对 mailto 方案和HTML源作为 body, ,像这样: mailto:foo@example.com?body={my HTML source goes here}.你应该省略花括号 {}.和以前一样,你应该使用它 NSURL 对象作为 activityItems 阵列。

希望这给你一些想法。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top