Uiactityviewcontroller con HTML.
Domanda
Quando passerò una stringa contenente contenuto HTML come elemento di array al metodo UIActivityViewController initWithActivityItems
, non lo presenta come HTML nel controller 'Share' selezionato, ma presenta invece la sorgente HTML (cioè il markup anziché interpretarlo).
E mentre posso capire perché lo farebbe per gli obiettivi di condivisione che non supportano il contenuto HTML, non lo interpreterà per le cose come l'e-mail, che fanno (in precedenza questo sarebbe fatto impostando la proprietà isHTML
YES
sul MFMailComposeController
).
Dovrei sprecare il mio tempo a creare un UIActivityItemProvider
che restituisce contenuti personalizzati in base al "tipo di attività" o non c'è davvero alcun modo per ottenere il controller di posta presentato dal UIActivityViewController
per interpretare il contenuto come HTML?
Soluzione
Quali attività stai cercando di sostenere?I tipi di attività dipendono dal servizio, e sono carini chiaramente definito .Non c'è modo per i servizi per sapere che una stringa è un testo semplice o testo contrassegnato, ad esempio, potresti voler incollare il codice HTML di proposito.
Puoi sempre fare le cose del modo vecchio stile e copiare testo semplice e html al tabellone o chiamare direttamente il compositore di posta o qualunque cosa tu stia cercando di realizzare.
Altri suggerimenti
Nel mio test se la stringa inizia "
Se si desidera un buon risultato con i servizi di condivisione aware non HTML che è necessario utilizzare invece un oggetto che implementa il UiactitiviTeMSource Protocol e restituisce la stringa HTML quando da -activityViewControllerPlaceholderItem:
e da -activityViewController:itemForActivityType:
se l'attività è UIActivityTypeMail
e nil
diversamente.
un secondo UiactivityTemsource che restituisce una stringa non html adatta da -activityViewControllerPlaceholderItem:
e da -activityViewController:itemForActivityType:
se l'attività non è UIActivityTypeMail
(e nil
se è) è il resto del puzzle.
Raccomandare di avere un oggetto eseguire entrambi i lavori, poiché il motore UIActivity
ha il diritto di prendere decisioni diverse in base al fatto che l'elemento segnaposto sembra essere HTML o meno.
Non ho provato nessuno di questi, ma sembravano ragionevoli per il tuo obiettivo quando mi stavo familiarizzare con UiactivityViewController.
1) È possibile scrivere la sorgente HTML su un file locale, ad esempio my_mail_message.html
, quindi creare un oggetto NSURL
con quel file, ad esempio [NSURL URLWithString:@"file://my_mail_message.html"]
, quindi utilizzare quell'oggetto NSURL
come elemento dell'array activityItems
che si nutronoinitWithActivityItems:applicationActivities:
.
2) Se si conosce il destinatario previsto, ad es. foo@example.com
, è possibile creare un oggetto NSURL
con lo schema mailto
e l'origine HTML come body
, come: mailto:foo@example.com?body={my HTML source goes here}
.
Dovresti omettere le bretelle ricci {}
.Come prima, è necessario utilizzare l'oggetto NSURL
come elemento dell'array activityItems
.
Spero che questo ti dà qualche idea.
Hai solo bisogno di assicurarsi che la prima riga della stringa HTML sia un tag.