HTMLを使用したUIActivityViewController
質問
HTMLコンテンツを含む文字列を配列要素として渡すと、次のようになります。 UIActivityViewController initWithActivityItems
メソッドは、選択された'share'コントローラにHTMLとして表示されませんが、代わりにHTMLソースを表示します(つまりそれを解釈するのではなく、マークアップ)。
そして、htmlコンテンツをサポートしていない共有ターゲットに対してこれを行う理由を理解できますが、電子メールのようなものに対しても解釈しません(以前はこれは設定することで行われました)。 isHTML
プロパティへ YES
上の MFMailComposeController
).
私は作成する私の時間を無駄にする必要があります UIActivityItemProvider
それは'activity type'に基づいてカスタムコンテンツを返しますか、または実際にはmail controllerを表示する方法はありませんか UIActivityViewController
コンテンツをHTMLとして解釈するには?
解決
どのような活動を支援しようとしていますか?アクティビティタイプはサービスに依存しており、それらはかなりです 明確に定義された.たとえば、文字列がプレーンテキストまたはマークアップされたテキストであることをサービスが知る方法はありません。
いつでも昔ながらの方法でプレーンテキストとHTMLをペーストボードにコピーしたり、mail composerを直接呼び出したり、達成しようとしていることは何でもできます。
他のヒント
私のテストでは、文字列が始まる場合は"<html><body>「そして終わり」</body></html>"それはHTMLとして扱われます。
非HTML対応の共有サービスで良好な結果が必要な場合は、代わりに次のことを実装するオブジェクトを使用する必要があります。 UIActivityItemSource プロトコルとhtml文字列を返しますときから -activityViewControllerPlaceholderItem:
とから -activityViewController:itemForActivityType:
アクティビティが次の場合 UIActivityTypeMail
と nil
そうでなければ。
第二に UIActivityItemSource これは、適切な非HTML文字列を返します -activityViewControllerPlaceholderItem:
とから -activityViewController:itemForActivityType:
アクティビティがそうでない場合 UIActivityTypeMail
(および nil
それがある場合)は、パズルの残りの部分です。
私は1つのオブジェクトに両方の仕事をさせることをお勧めします UIActivity
engineは、プレースホルダー項目が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
schemeとHTMLソースとして body
, 、そうのように: mailto:foo@example.com?body={my HTML source goes here}
.中括弧は省略する必要があります {}
.前と同じように、それを使用する必要があります NSURL
の要素としてのオブジェクト activityItems
配列。
これがあなたにいくつかのアイデアを与えることを願っています。
HTML文字列の最初の行がタグであることを確認するだけです。