0

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

4

2 回答 2

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];
    } 
}
于 2021-03-22T13:43:09.530 回答
0

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

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

在 UIwebview 中加载 aboue 文本

于 2015-06-16T16:26:48.727 回答