带有HTML的UIActivityViewController
题
当我将包含HTML内容的字符串作为数组元素传递给 UIActivityViewController initWithActivityItems
方法它不会在选定的"共享"控制器中将其呈现为HTML,而是呈现HTML源(即的标记而不是解释它)。
虽然我可以理解为什么它会对不支持html内容的共享目标执行此操作,但它也不会对电子邮件等内容进行解释(以前这将通过设置 isHTML
物业至 YES
在 MFMailComposeController
).
我应该浪费我的时间创建一个 UIActivityItemProvider
这将返回基于"活动类型"的自定义内容,或者真的没有办法获得由 UIActivityViewController
将内容解释为HTML?
解决方案
您希望支持哪些活动?活动类型依赖于服务,它们非常漂亮 明确界定.例如,服务无法知道字符串是纯文本或标记文本-您可能想要故意粘贴HTML代码。
你总是可以用老式的方式做一些事情,将纯文本和HTML复制到白板上,或者直接调用邮件作曲家,或者任何你想完成的事情。
其他提示
在我的测试中,如果字符串开始"<html><body>"和结束"</body></html>"然后它被视为HTML。
如果您希望使用非HTML感知共享服务获得良好结果,则需要使用实现 UIActivityItemSource 协议并返回html字符串时,从 -activityViewControllerPlaceholderItem:
而从 -activityViewController:itemForActivityType:
如果活动是 UIActivityTypeMail
和 nil
否则。
一秒钟 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字符串的第一行是一个标签。