我如何创build一个“超链接”与斯威夫特?
我正在尝试使单独的文本UILabel
的点击片断。 我一直在寻找的是networking开发中的一个超链接。
<a href="//example.com">Link 1</a> <a href="//example.com/example">Link 2</a> <a href="//example.com/other_example">Link 3</a>
每个标签都是自己的UILabel
,当点击标签之间的文本时,理想情况下它将Safari打开到指定的href
。
在Objective-C中,我发现了大量的资源,但这些资源看起来不必要的复杂,并且不能很好地转换成Swift(它们适合Objective-C的组织结构,在Swift中,并且违背了使用该语言的推荐方式)。
这里有几个:
- 如何在iPhone应用程序中添加超链接?
- 如何在NSTextField和Cocoa中创build一个可点击的链接
- 在Objective-C中作为超链接的文本
如果我有一个3 UILabel
s,
第1项
第2项
第3项
那么什么是最好的“Swift-y”的方式,使每个项目打开到不同的url在Safari?
我可以为每个button创build单独的button,但UILabel
以编程方式填充,所以我在考虑让文本响应水龙头可能是一个更好的select。
一种方法将是类似于以下内容。
假设是:
- self.urls是包含与每个
UILabel
关联的url的string数组。 - 每个
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); } }
Swift 3我在github中创build了一个LinkUILabel类: https : //github.com/jorgecsan/LinkUILabel有了这个,你只需要添加可视化的url作为显示图像: 或以编程方式分配urlvariables:
linkUILabel.url = "www.example.com"
如果你想通过你自己来实现我也find了解决scheme!:)
使用:
// 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) } }
希望能帮助到你!:)