带有多个链接的文本视图或 UI 标签

Text view or UI Label with multiple links

我有一个 iOS 应用程序的要求,其中使用 TextView 或 UILabel,显示包含文本和两个 link 的文本。如果有人单击文本 link,则关联的 link 必须相应地打开。

例如: 如果您看到下图,则有两个 link。我可以实现在属性检查器中制作文本视图文本属性和修改文本。

现在我的问题是当用户点击弗吉尼亚海滩或尼亚加拉时如何打开 links。如何识别用户点击了文本的哪一部分?

待打开链接:

https://www.vbgov.com/Pages/default.aspx

https://www.niagarafallsusa.com/

感谢您的帮助。

您可以使用 NSMutableAttributedString 来实现此功能。

我写了一个你可以使用的方法,从你的viewDidLoad

调用这个方法
- (void)configureLinks
{
    NSString *fullString = @"Please accept the terms and conditions of virginia beach and Niagara.";
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:fullString];

    // Adding attributes
    [attributedString addAttribute:NSLinkAttributeName value:@"https://www.vbgov.com/Pages/default.aspx" range:[fullString rangeOfString:@"virginia beach"]];
    [attributedString addAttribute:NSLinkAttributeName value:@"https://www.niagarafallsusa.com/" range:[fullString rangeOfString:@"Niagara"]];

    // For underline
    [attributedString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:[fullString rangeOfString:@"virginia beach"]];
    [attributedString addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:[fullString rangeOfString:@"Niagara"]];

    // Setting attributed string to textview
    yourTextViewOrLabel.attributedText = attributedString;
}

试试这个..我在@MidhunMP 回答中添加了下划线代码。

NSString *stringValue = @"Please accept the terms and conditions of virginia beach and Niagara.";
NSMutableAttributedString *output = [[NSMutableAttributedString alloc] initWithString:stringValue];
[output addAttribute:NSLinkAttributeName value:@"https://www.vbgov.com/Pages/default.aspx" range:[stringValue rangeOfString:@"virginia beach"]];
[output addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:[stringValue rangeOfString:@"virginia beach"]];
[output addAttribute:NSLinkAttributeName value:@"https://www.niagarafallsusa.com/" range:[stringValue rangeOfString:@"Niagara"]];
[output addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:[stringValue rangeOfString:@"Niagara"]];
yourTextView.attributedText = output;

你可以简单地使用 KI Label 简单易行

将此用于 Swift 5

func hyperLink(originalText: String, hyperLink: String, hyperLink2: String, urlString: String, urlString2: String) {

let style = NSMutableParagraphStyle()
style.alignment = .center

let attributedOriginalText = NSMutableAttributedString(string: originalText)
let linkRange = attributedOriginalText.mutableString.range(of: hyperLink)
let linkRange2 = attributedOriginalText.mutableString.range(of: hyperLink2)
let fullRange = NSMakeRange(0, attributedOriginalText.length)
attributedOriginalText.addAttribute(NSAttributedString.Key.link, value: urlString, range: linkRange)
attributedOriginalText.addAttribute(NSAttributedString.Key.link, value: urlString2, range: linkRange2)
attributedOriginalText.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: fullRange)
attributedOriginalText.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.blue, range: fullRange)
attributedOriginalText.addAttribute(NSAttributedString.Key.font, value: UIFont.systemFont(ofSize: 13), range: fullRange)

self.linkTextAttributes = [
    kCTForegroundColorAttributeName: UIColor.black,
    kCTUnderlineStyleAttributeName: NSUnderlineStyle.single.rawValue,
    ] as [NSAttributedString.Key : Any]

self.attributedText = attributedOriginalText
 }
}

添加这些

var linkUrl = "https://google.com"
var linkUrl2 = "https://facebook.com"
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
    if (URL.absoluteString == linkUrl) {
        UIApplication.shared.open(URL) { (Bool) in

        }
    }
    if (URL.absoluteString == linkUrl2) {
        UIApplication.shared.open(URL) { (Bool) in

        }
    }
    return false
}

在代码中这样使用

textViewMain.hyperLink(originalText: "This App is using Google and Facebook Login", hyperLink: "Google", hyperLink2: "Facebook", urlString: linkUrl, urlString2: linkUrl2)