how to append Attributed Text String with Attributed String in Swift
Use NSMutableAttributedString
Small example
let yourAttributes = [NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: UIFont.systemFontOfSize(15)]let yourOtherAttributes = [NSForegroundColorAttributeName: UIColor.redColor(), NSFontAttributeName: UIFont.systemFontOfSize(25)]let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes)let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes)let combination = NSMutableAttributedString()combination.appendAttributedString(partOne)combination.appendAttributedString(partTwo)
Swift 3
let yourAttributes = [NSForegroundColorAttributeName: UIColor.black, NSFontAttributeName: UIFont.systemFont(ofSize: 15)]let yourOtherAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.systemFont(ofSize: 25)]let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes)let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes)let combination = NSMutableAttributedString()combination.append(partOne)combination.append(partTwo)
combination
represents your final string which contains both formattings provided by yourAttributes
and yourOtherAttributes
@glace's answer, modified to avoid empty NSMutableAttributedString
declaration. Valid in Swift 3.1:
let yourAttributes = [NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: UIFont.systemFontOfSize(15)]let yourOtherAttributes = [NSForegroundColorAttributeName: UIColor.redColor(), NSFontAttributeName: UIFont.systemFontOfSize(25)]let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes)let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes)partOne.append(partTwo)
partOne
is then your final string with all the attributes. No intermediate "combiner" necessary.
Swift 4
let yourAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.black, .font: UIFont.systemFont(ofSize: 15)]let yourOtherAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.red, .font: UIFont.systemFont(ofSize: 25)]let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes)let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes)partOne.append(partTwo)
Swift 5
As per "glace" answer, I just update font attribute and swift version.
let boldFontAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 17)] let normalFontAttributes = [NSAttributedString.Key.foregroundColor: UIColor.darkGray, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)] let partOne = NSMutableAttributedString(string: "This is an example ", attributes: boldFontAttributes) let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: normalFontAttributes) let combination = NSMutableAttributedString() combination.append(partOne) combination.append(partTwo) lblUserName.attributedText = combination