UIActivityViewController with HTML

不羁岁月 提交于 2019-12-02 20:45:34

What activities are you looking to support? Activity types are dependent on the service, and they're pretty clearly defined. There's no way for services to know that a string is a plain text or marked-up text, for example--you might want to paste HTML code on purpose.

You can always do things the old-fashioned way and copy plain text and HTML to the pasteboard, or call the mail composer directly, or whatever you're trying to accomplish.

In my testing if the string begins "<html><body>" and ends "</body></html>" then it is treated as HTML.

If you want a good result with the non-HTML-aware sharing services you need to instead use an object that implements the UIActivityItemSource protocol and returns the HTML string when from -activityViewControllerPlaceholderItem: and from -activityViewController:itemForActivityType: if the activity is UIActivityTypeMail and nil otherwise.

A second UIActivityItemSource that returns a suitable non-HTML string from -activityViewControllerPlaceholderItem: and from -activityViewController:itemForActivityType: if the activity is not UIActivityTypeMail (and nil if it is) is the rest of the puzzle.

I recommend against having one object do both jobs, as the UIActivity engine is entitled to make different decisions based on whether the placeholder item appears to be HTML or not.

I haven't tried any of these, but they seemed reasonable for your goal when I was getting myself familiar with UIActivityViewController.

1) You could write the HTML source to a local file, e.g., my_mail_message.html, then build an NSURL object with that file, e.g., [NSURL URLWithString:@"file://my_mail_message.html"], and then use that NSURL object as an element of the activityItems array that you feed to initWithActivityItems:applicationActivities:.

2) If you know the intended recipient, e.g., foo@example.com, you could possibly build an NSURL object with the mailto scheme and the HTML source as the body, like so: mailto:foo@example.com?body={my HTML source goes here}. You should omit the curly braces {}. As before, you should then use that NSURL object as an element of the activityItems array.

Hope this gives you some ideas.

You just need to make sure the first line of the HTML string is an tag.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!