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
,你可以用mailto
scheme和HTML源代码构build一个NSURL
对象,如下所示: mailto:foo@example.com?body={my HTML source goes here}
。 你应该省略大括号{}
。 和以前一样,您应该使用该NSURL
对象作为activityItems
数组的一个元素。
希望这给你一些想法。
你只需要确保HTMLstring的第一行是一个标签。