5

My question is similar in theory to this one: iOS NSAttributedString on UIButton

I am looking to make the title of my button read as:

"An underlined string

Some text"

This needs to be done in swift and 100% programmatically.

I am attempting to do this by creating the underlined section using an NSMutableAttributedString and then appending that to the other text (which leads with a newline character). However, that gives me the error "Cannot assign value of type 'Void' ('aka'()') to type 'NSMutableAttributedString"

Code below:

var patientName = NSMutableAttributedString(string:"Patient Name", attributes: underlineAttributes)
var clickforinfomessage = NSMutableAttributedString(string: "\nclick for patient info")
clickforinfomessage = clickforinfomessage.appendAttributedString(patientName)
startVisitButton.setAttributedTitle(clickforinfomessage, forState: .Normal)
Community
  • 1
  • 1
DMop
  • 463
  • 8
  • 23
  • `clickforinfomessage = clickforinfomessage.appendAttributedString(patientName)` to `clickforinfomessage.appendAttributedString(patientName)`. There is no return in this method (`appendAttributedString()`) as says the error. – Larme May 10 '16 at 06:21

2 Answers2

18

You can do it this way:

let dict1 = [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue]

let attString = NSMutableAttributedString()
attString.appendAttributedString(NSAttributedString(string: "Patient Name\n", attributes: dict1))
attString.appendAttributedString(NSAttributedString(string: "click for patient info", attributes: nil))
startVisitButton.setAttributedTitle(attString, forState: .Normal)
startVisitButton.titleLabel?.numberOfLines = 0
startVisitButton.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping

And result will be:

enter image description here

Dharmesh Kheni
  • 71,228
  • 33
  • 160
  • 165
0

Just set the number of line for the button's title label

let attrTet = NSMutableAttributedString(string: "Test is \ne next line.", attributes: nil)
testButton.titleLabel?.numberOfLines = 0
testButton.setTitle(attrTet.string, forState: .Normal)

Code View:

Code View

Output:

Output

Umar Farooque
  • 2,049
  • 21
  • 32