我有一个ios应用程序,它从服务器获取一段文本并将其显示在TTTAttributedLabel中。显示的文本将从HTML中删除。
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];
但如果“World”这个词在文本中出现不止一次,则上述代码将是错误的。
任何人都可以提出更好的方法来处理这种情况吗? 感谢
答案 0 :(得分: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];