Подтвердить что ты не робот

HTML из NSAttributedString

Вместо преобразования HTML в атрибутированную строку мне нужно преобразовать его обратно в HTML. Это можно легко сделать на Mac, как можно увидеть здесь: http://www.justria.com/2011/01/18/how-to-convert-nsattributedstring-to-html-markup/

К сожалению, метод dataFromRange:documentAttributes: доступен только на Mac через дополнения NSAttributedString AppKit.

Мой вопрос: как вы можете это сделать на iOS?

4b9b3361

Ответ 1

Не "простой" способ, но как насчет итерации через атрибуты строки, используя:

- (void)enumerateAttributesInRange:(NSRange)enumerationRange 
                           options:(NSAttributedStringEnumerationOptions)opts 
                        usingBlock:(void (^)(NSDictionary *attrs, NSRange range, BOOL *stop))block

Имейте переменную NSMutableString, чтобы скопировать HTML (назовем его "html" ). В блоке вы создадите HTML вручную, используя строки. Например, если атрибуты текста "attrs" указывают красный, полужирный текст:

[html appendFormat:@"<span style='color:red; font-weight: bold;'>%@</span>", [originalStr substringWithRange:range]]


EDIT: Наткнулся на это вчера:

Категория NSAttributedString + HTMLFromRange от "UliKit" (https://github.com/uliwitness/UliKit/blob/master/NSAttributedString+HTMLFromRange.m)

Похоже, он будет делать то, что вы хотите.

Ответ 2

Используйте приведенный ниже код. он работает хорошо.

NSAttributedString *s = ...;
NSDictionary *documentAttributes = @{NSDocumentTypeDocumentAttribute:    NSHTMLTextDocumentType};    
NSData *htmlData = [s dataFromRange:NSMakeRange(0, s.length)    documentAttributes:documentAttributes error:NULL];
NSString *htmlString = [[NSString alloc] initWithData:htmlData encoding:NSUTF8StringEncoding];