Search code examples
iosswiftuilabel

How to detect link in UILabel in swift 4?


I was using ActiveLabel as third party library to make link in a label for particular words.The code works fine for Swift 3 & 3.2. but does not work for swift 4.

Below code i used

let customType1 = ActiveType.custom(pattern: "\\sTerms & Conditions\\b") //Looks for "are"
            labelTc.enabledTypes.append(customType1)
            labelTc.customize { (label) in
                labelTc.text = "UserAgreement".localized
                label.numberOfLines = 0
                label.lineSpacing = 4
                label.textColor = UIColor(red: 131 / 255, green: 147 / 255, blue: 168 / 255, alpha: 1)
                //Custom types
                label.customColor[customType1] = Constant.AppColor.greenMeadow
                label.customSelectedColor[customType1] = Constant.AppColor.greenMeadow
                label.configureLinkAttribute = { (type, attributes, isSelected) in
                    var atts = attributes
                    switch type {
                    case customType1:
                        atts[NSAttributedStringKey.font._rawValue as String] = UIFont(name: self.labelTc.font.fontName, size: 15.0)
                        atts[NSAttributedStringKey.underlineStyle.rawValue] = NSUnderlineStyle.styleSingle
                        break


                    case .mention:
                        break
                    case .hashtag:
                        break
                    case .url:
                        break
                    case .custom(let pattern):
                        break

                    default :
                        break
                    }

                    return atts
                }

Can anyone give me solution using native code instead of using third party library.


Solution

  • I was able to find out the solution for swift 4 as well.

    label.configureLinkAttribute = { (type, attributes, isSelected) in
                    var atts = attributes
                    switch type {
                    case customType1:
                        atts[NSAttributedStringKey.font.rawValue] = UIFont(name: self.labelTc.font.fontName, size: 15.0)
                        atts[NSAttributedStringKey.underlineStyle.rawValue] = NSUnderlineStyle.styleSingle.rawValue
                        break
    
                  default: ()
                    }
                    return atts
                }