24

NSAttributed設定した (HTML からの) 文字列がありますUITextView

- (void)setHtml:(NSString *)html {

    NSData *htmlData = [html dataUsingEncoding:NSUTF8StringEncoding];

    // Create the HTML string
    NSDictionary *importParams = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSError *error = nil;
    self.htmlString = [[NSAttributedString alloc] initWithData:htmlData options:importParams documentAttributes:NULL error:&error];

    self.editorView.attributedText = self.htmlString;

}

次に、ユーザーが必要なものを編集できるようにし、それを再度 HTML に変換したいので、次を使用します。

- (NSString *)getHTML {
    NSDictionary *exportParams = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSData *htmlData = [self.editorView.attributedText dataFromRange:NSMakeRange(0, self.editorView.attributedText.length) documentAttributes:exportParams error:nil];
    return [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
}

HTMLを返しますが、それは私が望む方法ではありません。すべてに class 属性が与えられ、CSS がドキュメントの上部に配置されます。画像やリンクなどは、返される HTML には含まれておらず、おそらくさらに多くの問題が含まれています。

から HTML を取得するより良い方法はありNSAttributedStringますか? または、を解析しNSAttributedStringて独自の HTML を作成する方法はありますか?

4

3 に答える 3

13

そのリポジトリを見ることができるかもしれません: https://github.com/IdeasOnCanvas/Ashton

2 つの興味深いクラスがあります。

AshtonHTMLReader.h

 - (NSAttributedString *)attributedStringFromHTMLString:(NSString *)htmlString;

そして作家:

AshtonHTMLWriter.h

- (NSString *)HTMLStringFromAttributedString:(NSAttributedString *)input;

生成された html はあまり見栄えがよくありませんが、uiwebview で表示しようとすると、見栄えがよくなります。

画像の簡単なアイデア: base64 でエンコードし、適切なフレームで < img > タグに直接配置します。

それは醜いですが、それは動作します=>私はこのプロセスを使用して、数か月前にいくつかのhtmlファイルを作成および編集しました

于 2014-02-05T16:40:19.457 に答える
9

これは複雑な問題であり、短い回答から始めます。コメントで質問することもできます。必要に応じて回答を拡大します。

また、属性付きの文字列ルートを試してみましたが、完全な HTML 編集には適していないことがわかりました。コンバーターが完全に開発されていないか、これらの要素が Apple によって範囲外と見なされたため、多くの要素がサポートされていません。属性付き文字列を解析するだけでは十分ではありません。属性付き文字列は、再作成しようとするまでに、HTML の豊富さのほとんどを失っているからです。

代わりに、webview を使用し、通常どおりドキュメントを読み込み、contentEditablebody 要素で有効にします。これにより、ドキュメントを最大限に編集できるようになり、WebKit によってのみ制限されます。最後に、HTML を元に戻すために、 を無効contentEditabledocument.outerHTMLして、ユーザーが変更を加えた以前の HTML 全体を取得します。

このメソッドの実装を軽視しないでください。これはやや複雑なソリューションですが、確かに可能です。WebView は TextView ほど優れたものではありませんが、十分なマッサージがあれば、そうなる可能性があります。

必要に応じて、この回答を拡張します。

于 2014-02-04T18:42:02.050 に答える
3

プロジェクトの 1 つで、NSAtttributedString を HTML に変換する必要もありました。これを行うためのコードは次のとおりです。

//self.attributed String is the attributedString 
NSDictionary *documentAttributes = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
NSData *htmlData = [self.attributedString dataFromRange:NSMakeRange(0, self.attributedString.length) documentAttributes:documentAttributes error:NULL];
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];
NSLog(@"%@", htmlString);
于 2016-10-03T13:00:19.983 に答える