How can I concatenate NSAttributedStrings? How can I concatenate NSAttributedStrings? ios ios

How can I concatenate NSAttributedStrings?


I'd recommend you use a single mutable attributed string a @Linuxios suggested, and here's another example of that:

NSMutableAttributedString *mutableAttString = [[NSMutableAttributedString alloc] init];NSString *plainString = // ...NSDictionary *attributes = // ... a dictionary with your attributes.NSAttributedString *newAttString = [[NSAttributedString alloc] initWithString:plainString attributes:attributes];[mutableAttString appendAttributedString:newAttString];

However, just for the sake of getting all the options out there, you could also create a single mutable attributed string, made from a formatted NSString containing the input strings already put together. You could then use addAttributes: range: to add the attributes after the fact to the ranges containing the input strings. I recommend the former way though.


If you're using Swift, you can just overload the + operator so that you can concatenate them in the same way you concatenate normal strings:

// concatenate attributed stringsfunc + (left: NSAttributedString, right: NSAttributedString) -> NSAttributedString{    let result = NSMutableAttributedString()    result.append(left)    result.append(right)    return result}

Now you can concatenate them just by adding them:

let helloworld = NSAttributedString(string: "Hello ") + NSAttributedString(string: "World")


Swift 3: Simply create a NSMutableAttributedString and append the attributed strings to them.

let mutableAttributedString = NSMutableAttributedString()let boldAttribute = [    NSFontAttributeName: UIFont(name: "GothamPro-Medium", size: 13)!,    NSForegroundColorAttributeName: Constants.defaultBlackColor]let regularAttribute = [    NSFontAttributeName: UIFont(name: "Gotham Pro", size: 13)!,    NSForegroundColorAttributeName: Constants.defaultBlackColor]let boldAttributedString = NSAttributedString(string: "Warning: ", attributes: boldAttribute)let regularAttributedString = NSAttributedString(string: "All tasks within this project will be deleted.  If you're sure you want to delete all tasks and this project, type DELETE to confirm.", attributes: regularAttribute)mutableAttributedString.append(boldAttributedString)mutableAttributedString.append(regularAttributedString)descriptionTextView.attributedText = mutableAttributedString

swift5 upd:

    let captionAttribute = [        NSAttributedString.Key.font: Font.captionsRegular,        NSAttributedString.Key.foregroundColor: UIColor.appGray    ]