UIActivityViewController com HTML
Pergunta
Quando eu passar uma seqüência de caracteres que contém o conteúdo HTML como um elemento de matriz para o UIActivityViewController initWithActivityItems
o método não apresenta-lo como HTML em 'compartilhar' controlador, mas, em vez disso apresenta o código HTML (i.e.a marcação em vez de interpretá-lo).
E enquanto eu posso entender por que ele faria isso para compartilhar metas que não oferecem suporte a conteúdo em html, não interpretá-lo para coisas como e-mail, o que fazer (anteriormente, isso deve ser feito definindo o isHTML
propriedade YES
no MFMailComposeController
).
Eu deveria perder o meu tempo a criar um UIActivityItemProvider
que retorna de conteúdo personalizado com base no "tipo de atividade", ou seja, não há realmente nenhuma maneira de obter o email do controlador apresentado pelo UIActivityViewController
para interpretar o conteúdo como HTML?
Solução
Quais as atividades que você está olhando para o suporte?Tipos de atividade dependem do serviço, e eles são muito claramente definidos.Não há nenhuma maneira de serviços de saber que uma string é um texto simples ou marcado de texto, por exemplo, você pode querer colar o código HTML de propósito.
Você pode sempre fazer as coisas da maneira antiga e cópia de texto sem formatação e HTML para o quadro de colagem, ou ligue para o compositor de e-mail diretamente, ou o que quer que você está tentando realizar.
Outras dicas
No meu teste, se a cadeia começa "<html><body>"e termina "</body></html>"então ele é tratado como HTML.
Se você quer um bom resultado com o não-HTML-ciente de partilha de serviços que você precisa para usar em vez disso, um objeto que implementa a UIActivityItemSource protocolo e retorna a seqüência de caracteres HTML quando, a partir -activityViewControllerPlaceholderItem:
e a partir de -activityViewController:itemForActivityType:
se a atividade é UIActivityTypeMail
e nil
caso contrário.
Um segundo UIActivityItemSource que retorna um adequado não-HTML cadeia de -activityViewControllerPlaceholderItem:
e a partir de -activityViewController:itemForActivityType:
se a atividade não é UIActivityTypeMail
(e nil
se é) é o resto do quebra-cabeça.
Eu recomendo contra a existência de um objeto em ambos os trabalhos, como o UIActivity
o motor é o direito de tomar decisões diferentes, dependendo de se o espaço reservado item parece ser HTML ou não.
Eu não tentei qualquer um desses, mas parecia razoável para o seu objetivo, quando eu estava ficando-me familiarizado com UIActivityViewController.
1) Você poderia escrever o código fonte HTML para um ficheiro local, por exemplo, my_mail_message.html
, e , em seguida, construir uma NSURL
objeto com que o arquivo, por exemplo, [NSURL URLWithString:@"file://my_mail_message.html"]
, e , em seguida, usar o que NSURL
objeto como um elemento de a activityItems
matriz que você feed initWithActivityItems:applicationActivities:
.
2) Se você souber o destinatário pretendido, ou seja, foo@example.com
, você poderia construir um NSURL
objeto com o mailto
o esquema e o código-fonte HTML como o body
, assim: mailto:foo@example.com?body={my HTML source goes here}
.Você deve omitir as chaves {}
.Como antes, você deverá então utilizar o que NSURL
objeto como um elemento de a activityItems
matriz.
Espero que este dá-lhe algumas ideias.
Você só precisa ter certeza que a primeira linha da seqüência de caracteres HTML é uma tag.