2015-02-17 2 views
0

В прошивке 7 мы получили возможность преобразовать строку HTML в NSAttributedString, как это:Использование NSAttributedString перезаписать HTML атрибутов

NSString *html = @"<bold>Wow!</bold> Now <em>iOS</em> can create <h3>NSAttributedString</h3> from HTMLs!"; 
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}; 

NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUTF8StringEncoding] options:options documentAttributes:nil error:nil]; 

Мы также имеем возможность предоставлять значения по умолчанию для HTML, который не укажите определенные атрибуты, используя параметр NSDefaultAttributesDocumentAttribute.

Мой вопрос: есть ли способ указать NSAttributedString игнорировать определенные атрибуты, которые он видит в HTML (например, цвет), и вместо этого использовать тот, который я предоставляю? Другими словами, я хочу указать значение атрибута переопределения, а не значение по умолчанию.

+0

Возможно, вы захотите изменить исходный HTML-код, найденный http://stackoverflow.com/a/21759504/1535038 –

+0

HTML-код получен из ответа сервера, поэтому я не могу изменить без тонких манипуляций с строкой. –

+0

Я бы либо перебирал атрибуты, которые вы хотите отредактировать, либо запустил html, хотя синтаксический анализатор xml, и сам установил атрибуты. Вы можете попробовать подклассифицировать NSAttributedString или испепелить метод setAttributes для перехвата сеттера и изменения значений по мере их передачи. – ethyreal

ответ

1

Вы можете попробовать перечислить строку. Например, попытка изменить цвет ссылки.

NSMutableAttributedString *mttrString = [attrString mutableCopy]; 
[mutableString beginEditing]; 
[mutableString enumerateAttribute:NSLinkAttributeName 
      inRange:NSMakeRange(0, res.length) 
      options:0 
     usingBlock:^(id value, NSRange range, BOOL *stop) { 
      if (value) { 
       UIFont *oldFont = (UIFont *)value; 
       UIFont *newFont = [UIFont systemFontOfSize:12.f]; 
       [res addAttribute:NSFontAttributeName value:newFont range:range]; 
      } 
     }]; 
[res endEditing]; 
attrString = mAttrString; 

Я не пробовал это, но вы должны иметь возможность управлять строкой таким образом.

Смежные вопросы