Underline button text in Swift Underline button text in Swift xcode xcode

Underline button text in Swift


Swift 5 / Xcode 12

  @IBOutlet weak var myButton: UIButton!     let yourAttributes: [NSAttributedString.Key: Any] = [      .font: UIFont.systemFont(ofSize: 14),      .foregroundColor: UIColor.blue,      .underlineStyle: NSUnderlineStyle.single.rawValue  ] // .double.rawValue, .thick.rawValue             override func viewDidLoad() {     super.viewDidLoad()         let attributeString = NSMutableAttributedString(        string: "Your button text",        attributes: yourAttributes     )     myButton.setAttributedTitle(attributeString, for: .normal)  }

Swift 4 / Xcode 9

  @IBOutlet weak var myButton: UIButton!     let yourAttributes: [NSAttributedStringKey: Any] = [      NSAttributedStringKey.font: UIFont.systemFont(ofSize: 14),      NSAttributedStringKey.foregroundColor: UIColor.blue,      NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleSingle.rawValue  ] // .styleDouble.rawValue, .styleThick.rawValue, .styleNone.rawValue                 override func viewDidLoad() {    super.viewDidLoad()        let attributeString = NSMutableAttributedString(      string: "Your button text",      attributes: yourAttributes    )    myButton.setAttributedTitle(attributeString, for: .normal)  }

Swift 3 / Xcode 8

  @IBOutlet weak var myButton: UIButton!  let yourAttributes: [String: Any] = [      NSFontAttributeName: UIFont.systemFont(ofSize: 14),      NSForegroundColorAttributeName: UIColor.white,      NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue  ] // .styleDouble.rawValue, .styleThick.rawValue, .styleNone.rawValue                override func viewDidLoad() {      super.viewDidLoad()      let attributeString = NSMutableAttributedString(        string: "Your button text",        attributes: yourAttributes      )              myButton.setAttributedTitle(attributeString, for: .normal)     }

enter image description here


Here you go, just tested it. (works in xCode 7 Beta at least)

@IBOutlet weak var yourButton: UIButton!var attrs = [NSFontAttributeName : UIFont.systemFontOfSize(19.0),NSForegroundColorAttributeName : UIColor.redColor(),NSUnderlineStyleAttributeName : 1]var attributedString = NSMutableAttributedString(string:"")override func viewDidLoad() {  super.viewDidLoad()  let buttonTitleStr = NSMutableAttributedString(string:"My Button", attributes:attrs)  attributedString.appendAttributedString(buttonTitleStr)  yourButton.setAttributedTitle(attributedString, forState: .Normal)}


if you are looking for a way to do this without inheritance -

swift 3/4/5

// in swift 4 - switch NSUnderlineStyleAttributeName with NSAttributedStringKey.underlineStyleextension UIButton {    func underline() {        guard let text = self.titleLabel?.text else { return }        let attributedString = NSMutableAttributedString(string: text)        //NSAttributedStringKey.foregroundColor : UIColor.blue        attributedString.addAttribute(NSAttributedString.Key.underlineColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))        attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: self.titleColor(for: .normal)!, range: NSRange(location: 0, length: text.count))        attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: text.count))        self.setAttributedTitle(attributedString, for: .normal)    }}extension UILabel {    func underline() {        if let textString = self.text {            let attributedString = NSMutableAttributedString(string: textString)            attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: NSRange(location: 0, length: attributedString.length - 1))            attributedText = attributedString        }    }}