Сделать Кликабельную UILabel С Помощью Swift

Я хочу установить конкретное слово clickable в UILabel текст с помощью Swift.

это возможно?

Если здесь более одной метки, как я могу определить, какое слово нажато?

3 ответов


вы не можете сделать с простой этикеткой.

в github доступна библиотека.

https://github.com/TTTAttributedLabel/TTTAttributedLabel

из этого вы можете использовать метод под названием yourLabel.addLinkToURL()

class ViewController: UIViewController , TTTAttributedLabelDelegate{

    @IBOutlet var lbl: TTTAttributedLabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        var str : NSString = "Hello this is link"
        lbl.delegate = self
        lbl.text = str as String
        var range : NSRange = str.rangeOfString("link")
        lbl.addLinkToURL(NSURL(string: "http://github.com/mattt/")!, withRange: range)
    }

    func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) {
        UIApplication.sharedApplication().openURL(url)
    }
}

enter image description here


SWIFT 3.0

    privacyLabel.delegate = self
    let strPolicy  : NSString = "Agree to the Terms & Conditions"
    privacyLabel.text = strPolicy as String
    let range1 : NSRange = strPolicy.range(of: "Terms & Conditions")
    privacyLabel.addLink(to: URL(string: "http://Terms.com")!, with: range1)



    func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) {

         print("url \(url)")
          // UIApplication.sharedApplication().openURL(url)
    }

Я хотел бы поделиться своей библиотекой https://github.com/psharanda/Atributika

Он содержит современную замену TTTAtributedLabel + мощный набор методов для обнаружения и стиля различных вещей, таких как теги, хэштеги, упоминания и т. д. (Все это можно щелкнуть)

некоторый код, чтобы показать, как он работает:

    let link = Style
        .font(.boldSystemFont(ofSize: 14))
        .foregroundColor(.black)
        .foregroundColor(.red, .highlighted)

    let tos = link.named("tos")
    let pp = link.named("pp")

    let all = Style
        .font(.systemFont(ofSize: 14))
        .foregroundColor(.gray)

    let text = "<tos>Terms of Service</tos> and <pp>Privacy Policy</pp>"
        .style(tags: tos, pp)
        .styleAll(all)

    let tosLabel = AttributedLabel()
    tosLabel.textAlignment = .center
    tosLabel.attributedText = text
    tosLabel.onClick = { label, detection in
        switch detection.type {
        case .tag(let tag):
            switch tag.name {
            case "pp":
                print("Privacy Policy clicked")
            case "tos":
                print("Terms of Service clicked")
            default:
                break
            }
        default:
            break
        }
    }

    view.addSubview(tosLabel)