2014-09-25 92 views
4

我有一個ios應用程序從服務器獲取一段文本並將其顯示在TTTAttributedLabel中。顯示的文本將從HTML中剝離。如何在TTTAttributedLabel中將HTML錨定爲可點擊的鏈接?

E.g.在TTTAttributedLabel

Hello World! 

然而

原始的HTML

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

文本顯示,我想這個詞 「世界」 可以點擊,如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 2014-11-14 12:02:37

+0

請參閱下面的評論。 – cppcho 2014-11-17 04:25:41

回答

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 2016-02-11 15:42:59

+1

如果您使用的是swift,如果您嘗試將「NSAttributedString」分配給TTTAttributedLabel的「text」變量,則會發生錯誤。使用'.setText(AnyObject)'來代替,一切都會按照它應該的那樣工作。 – TheRedFox 2016-06-21 09:02:54

+0

@cppcho你是救星感謝的人! (Y) – 2016-12-24 11:43:45