带有多个链接的文本视图或 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)
我有一个 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)