如何使用Swift创建“超链接”?

时间:2014-08-25 00:22:04

标签: ios cocoa-touch hyperlink swift

我正在尝试制作单独的文本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,

  

第1项

     

第2项

     

第3项

那么在Safari中将每个项目打开到不同的URL会有什么最好的“Swift-y”方法呢?

我可以为每个按钮创建单独的按钮,但是UILabel是以编程方式填充的,所以我认为让文本响应水龙头可能是更好的选择。

3 个答案:

答案 0 :(得分:6)

Swift 3 我在github中创建了一个LinkUILabel类: https://github.com/jorgecsan/LinkUILabel 有了这个你只需要添加url inspectable作为显示图像: Example label with url或以编程方式分配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方法如下: 假设是:

  • self.urls是一个字符串数组,其中包含与每个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 }()