在UILabel中检测html中的链接(具有更改位置)(TTTAttributedLabel)

时间:2015-06-16 16:04:11

标签: ios objective-c uilabel tttattributedlabel

我的服务器中有一些文本,其中一些是HTML。我能够使用属性字符串和initWithData格式化文本以便显示,以便Apple显示为Apple和蓝色并加下划线。但我无法检测到水龙头。我使用TTTAttributedLabel并且能够编写一个虚拟字符串并让它创建一个链接,其中我用didSelectLinkWithURL拦截了它。问题是,定义文本范围的方法假定您知道链接的文本。我每次都会得到不同的字符串,但我不知道要添加链接的字符串是什么。我应该寻找打开和关闭的标签吗?此外,如果字符串中嵌入了多个链接,TTT可以处理吗?

2 个答案:

答案 0 :(得分:1)

这是解决方案。首先设置您的属性文本。然后找到每个字符的链接。然后使用 addLinkToUrl 方法设置它们。

NSAttributedString *attrString = [[NSAttributedString alloc] initWithData: 
                                   [text dataUsingEncoding:NSUTF8StringEncoding]   
                                   options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}
                                    documentAttributes:nil error:nil];
[label setAttributedText: attrString];
    
if (label.attributedText != nil && label.attributedText.length > 0) {
    for (int i= 0; i < label.attributedText.length; i++) {
        NSRange range = NSMakeRange(0,1);
        NSDictionary<NSAttributedStringKey,id> *dict = [label.attributedText attributesAtIndex:i effectiveRange:&range];
        if (dict[NSLinkAttributeName] != nil) {
            NSURL *url = dict[NSLinkAttributeName];
            [label addLinkToURL:url withRange:range];
        }
    }
}

执行此操作后,您将能够使用 TTTAttributedLabelDelegate 检测链接点击

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url {
    if([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    } 
}

答案 1 :(得分:0)

在UIWebview中以html代码显示文字。

<html>
<body>
<p><a href="http://www.w3schools.com/html/">Your text</a></p>
</body>
</html>

在UIwebview中加载aboue文本