这是我的代码,显示在一个UILabel链接
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var textFiled: UITextField!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let attrStr = try! NSAttributedString(
data: "This is a link <a href='http://www.google.com'>google</a>".dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
label.attributedText = attrStr
}
}
正如你可以从图片中看到的,它正确地显示了我只是想要它的链接,但该链接无法点击跳转到Web视图或其他视图。实际上,我需要自定义链接点击事件,我真的没有主意:
1.如何获取链接的URL。
1.如果有多个链接,我需要做什么。
感谢您首先检查此问题。
6条答案
按热度按时间zed5wv101#
简短的回答是UILabel不支持打开URL。它可以检测到链接存在,但不会做任何事情。
您可以找到问题解决方案的替代方案,您可以阅读有关here的信息
r7knjye22#
强烈建议使用UITextView对象,而不是UILabel,但是您可以使用KILabel项目作为UILabel的替代方案。参见https://github.com/Krelborn/KILabel/blob/master/README.md
uklbhaso3#
这是一个基本的方法为您的需要,我用我们为创建一个可点击的标签
nafvub8i4#
正如Luke所说,UILabels不支持URL。但您可以创建一个按钮,使其看起来像一个标签。去掉背景(使其看起来像文本)并实现按钮的函数以打开webview。可以使用属性化字符串编辑按钮中文本的样式。
当您将按钮添加到UI时,您可能希望使用自定义类而不是默认的uibutton类。
您需要:
1.初始化
1.如果使用属性化字符串,请实现setTitle或setAttributedTitle
或
3.配置按钮
4.将按钮添加到viewcontroller并将类更改为您创建的自定义类。
bvpmtnay5#
对于链接,通常正确的答案是使用
UITextView
。但我明白,对于简单的用例来说,额外的两个子视图可能会有点重。
UILabel
子类很好,但是您被限制使用自己的子类。其他答案都依赖于重新创建自己的文本堆栈,希望“模仿”UILabel
使用的文本堆栈,尽管当文本开始缩小时,这很快就会失败。因此,我创建了
LinkGestureRecognizer
(https://github.com/stuartjmoore/UILabel-LinkGestureRecognizer)来满足您对UILabel
的所有需求。它就像这样简单:
p8h8hvxi6#
在Swift 5中,为交互式标签创建一个Class,并将其分配给任何您想要使其可点击的uiLabel URL。它将工作在多行,它会发现,如果标签中的子字符串是URL,并将使其可点击.