我正在尝试制作单独的文本UILabel
可点击。我正在寻找的通常被称为Web开发中的超链接。
<a href="//example.com">Link 1</a>
<a href="//example.com/example">Link 2</a>
<a href="//example.com/other_example">Link 3</a>
每个a
代码都是自己的UILabel
,当点击代码之间的文字时,理想情况下会将Safari打开到指定的href
。
我在Objective-C中找到了大量关于如何做这类事情的资源,但它们看起来都不必要地复杂化,并且不能很好地转换为Swift(它们符合Objective-C组织结构,不具备'在Swift中运行良好,并且违背了推荐的使用语言的方式。)
以下是一些:
如果我有3 UILabel
s,
那么在Safari中将每个项目打开到不同的URL会有什么最好的“Swift-y”方法呢?第1项
第2项
第3项
我可以为每个按钮创建单独的按钮,但是UILabel
是以编程方式填充的,所以我认为让文本响应水龙头可能是更好的选择。
答案 0 :(得分:6)
Swift 3 我在github中创建了一个LinkUILabel类: https://github.com/jorgecsan/LinkUILabel 有了这个你只需要添加url inspectable作为显示图像: 或以编程方式分配url变量:
linkUILabel.url = "www.example.com"
如果您想通过自己实施,我也找到了解决方案!:)
使用:
// This is the label
@IBOutlet weak var label: UILabel!
override func loadView() {
super.loadView()
// This is the key
let tap = UITapGestureRecognizer(target: self, action: #selector(self.onClicLabel(sender:)))
label.isUserInteractionEnabled = true
label.addGestureRecognizer(tap)
}
// And that's the function :)
func onClicLabel(sender:UITapGestureRecognizer) {
openUrl("http://www.google.com")
}
func openUrl(urlString:String!) {
let url = URL(string: urlString)!
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
希望它有所帮助!:)
答案 1 :(得分:5)
One方法如下: 假设是:
UILabel
相关联的网址。UILabel
tag
已设置为数组labelTapped:
被设置为标签的touchUpInside
处理程序。import Foundation
import UIKit
class urltest {
var urls:[String]
init() {
self.urls=[String]() // Load URLs into here
}
@IBAction func labelTapped(sender:UILabel!) {
let urlIndex=sender.tag;
if (urlIndex >= 0 && urlIndex < self.urls.count) {
self.openUrl(self.urls[urlIndex]);
}
}
func openUrl(url:String!) {
let targetURL=NSURL.URLWithString(url)
let application=UIApplication.sharedApplication()
application.openURL(targetURL);
}
}
答案 2 :(得分:0)
通过UITextView的超链接
var termsConditionsTextView: UITextView = {
let view = UITextView()
view.backgroundColor = .clear
view.textAlignment = .left
let firstTitleString = "By registering for THIS_APP I agree with the "
let secondTitleString = "Terms & Conditions"
let finishTitleString = firstTitleString + secondTitleString
let attributedString = NSMutableAttributedString(string: finishTitleString)
attributedString.addAttribute(.link, value: "https://stackoverflow.com", range: NSRange(location: firstTitleString.count, length: secondTitleString.count))
view.attributedText = attributedString
view.textContainerInset = .zero
view.linkTextAttributes = [
.foregroundColor: UIColor.blue,
.underlineStyle: NSUnderlineStyle.single.isEmpty
]
view.font = view.font = UIFont(name: "YOUR_FONT_NAME", size: 16)
view.textColor = UIColor.black
return view }()