2014-09-25 2 views
4

У меня есть приложение ios, которое извлекает фрагмент текста с сервера и отображает его в TTTAttributedLabel. Отображаемый текст удаляется из HTML.Как сделать якорь HTML как ссылку для клика в TTTAttributedLabel?

E.g.

Оригинал HTML

<p> 
    Hello <a href="http://www.google.com">World!</a> 
</p> 

отображения текста в TTTAttributedLabel

Hello World! 

Однако, я хотел бы слово "Мир" быть интерактивными, как и в HTML. Я знаю, что TTTAttributedLabel может быть использован как

TTTAttributedLabel *tttLabel = <# create the label here #>; 
NSString *labelText = @"Hello World!"; 
tttLabel.text = labelText; 
NSRange r = [labelText rangeOfString:@"World"]; 
[tttLabel addLinkToURL:[NSURL URLWithString:@"http://www.google.com"] withRange:r]; 

Но если появится слово «Мир» более чем один раз в тексте, приведенный выше код будет неправильным.

Может ли кто-нибудь предложить лучший метод для обработки этого случая? Спасибо

+1

Вы нашли решение для этого? – Abhishek

+0

См. Мой комментарий ниже. – cppcho

ответ

7

Я, наконец, заканчиваю использование NSAttributedString, чтобы справиться с этим. Вот мой код.

TTTAttributedLabel *_contentLabel = [[TTTAttributedLabel alloc] init]; 
_contentLabel.backgroundColor = [UIColor clearColor]; 
_contentLabel.numberOfLines = 0; 
_contentLabel.enabledTextCheckingTypes = NSTextCheckingTypeLink; 
_contentLabel.delegate = self; 

_contentLabel.text = [[NSAttributedString alloc] initWithData:[[_model.content trimString] 
                   dataUsingEncoding:NSUnicodeStringEncoding] 
                 options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } 
              documentAttributes:nil 
                 error:nil]; 

Кроме того, в моем приложении мне нужно обновить размер шрифта _contentLabel на лету. И вот код.

NSFont *newFont = ...; // new font 

NSMutableAttributedString* attributedString = [_contentLabel.attributedText mutableCopy]; 

[attributedString beginEditing]; 
[attributedString enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attributedString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { 
    [attributedString removeAttribute:NSFontAttributeName range:range]; 
    [attributedString addAttribute:NSFontAttributeName value:newFont range:range]; 
}]; 
[attributedString endEditing]; 

_contentLabel.text = [attributedString copy]; 
+1

Спасибо, что сработало и для меня ... Спасибо! У меня был текст с сервера, на котором были теги href ... – cableload

+1

Если вы используете swift, это даст ошибку, если вы попытаетесь присвоить 'NSAttributedString' переменной' text' 'TTTAttributedLabel'. Вместо этого используйте '.setText (AnyObject)' и все будет работать так, как должно. – TheRedFox

+0

@cppcho ты спасатель спас меня! (Y), –