Clickable link in TTTAttributedLabel with Swift

一世执手 提交于 2019-12-03 13:18:41

TTTAttributedLabel lable in swift 4.2

import TTTAttributedLabel

  @IBOutlet weak var attributedLable: TTTAttributedLabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setup()
    }

    func setup(){
        attributedLable.numberOfLines = 0;

    let strTC = "terms and conditions"
    let strPP = "privacy policy"

    let string = "By signing up or logging in, you agree to our \(strTC) and \(strPP)"

    let nsString = string as NSString

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineHeightMultiple = 1.2

    let fullAttributedString = NSAttributedString(string:string, attributes: [
        NSAttributedString.Key.paragraphStyle: paragraphStyle,
        NSAttributedString.Key.foregroundColor: UIColor.black.cgColor,
        ])
    attributedLable.textAlignment = .center
    attributedLable.attributedText = fullAttributedString;

    let rangeTC = nsString.range(of: strTC)
    let rangePP = nsString.range(of: strPP)

    let ppLinkAttributes: [String: Any] = [
        NSAttributedString.Key.foregroundColor.rawValue: UIColor.blue.cgColor,
        NSAttributedString.Key.underlineStyle.rawValue: false,
        ]
    let ppActiveLinkAttributes: [String: Any] = [
        NSAttributedString.Key.foregroundColor.rawValue: UIColor.blue.cgColor,
        NSAttributedString.Key.underlineStyle.rawValue: false,
        ]

    attributedLable.activeLinkAttributes = ppActiveLinkAttributes
    attributedLable.linkAttributes = ppLinkAttributes

    let urlTC = URL(string: "action://TC")!
    let urlPP = URL(string: "action://PP")!
    attributedLable.addLink(to: urlTC, with: rangeTC)
    attributedLable.addLink(to: urlPP, with: rangePP)

    attributedLable.textColor = UIColor.black;
    attributedLable.delegate = self;
}

    func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) {
        if url.absoluteString == "action://TC" {
            print("TC click")
        }
        else if url.absoluteString == "action://PP" {
            print("PP click")
        }
    }

Out put is look like below screenshot

Tom

String.rangeOfString returns Range, but NSString.rangeOfString returns NSRange. So the following code should work:

let name = "tomo"
let string = "My name is \(name)"
label.text = string
let nsString = string as NSString
let range = nsString.rangeOfString(name)
let url = NSURL(string: "action://users/\(name)")!
label.addLinkToURL(url, withRange: range)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!