propstm propstm - 3 months ago 23x
iOS Question

Is it possible to get a listing of attributes and ranges for an NSMutableAttributedString?

I've created a method that takes a NSAttributedString and I'm looking to dynamically create a subview and label to put the string into. Because attributes like like font and size need to be determined to correctly determine the size of the label, I need to determine if it possible to iterate through values and ranges that have been applied to the attributed string?

I understand that I could pass the attributes separately, but for sake of reusability, i'd like to be able to pass as few parameters to the method as possible.


Apple expects you to use enumerateAttributesInRange:options:usingBlock:. The block you supply will receive ranges and the attributes applicable for that range.

I've used that in my code to create invisible buttons that are placed behind text so that it acts as a hyperlink.

You could also use enumerateAttribute:inRange:options:usingBlock: if there's only one you're interested in, but no halfway house is provided where you might be interested in, say, two attributes but not every attribute.