我如何创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) } } 

希望能帮助到你!:)