将粗体应用于NSAttributedString的一部分,同时保留字体大小和面

Kit*_*une 2 objective-c nsattributedstring ios

我正在使用iOS的富文本编辑器,使用UITextViewNSAttributedString.它的功能与传统的相似(即选择区域,单击按钮,并将该效果应用于该区域,同时保留文本上的任何其他属性.

不幸的是NSAttributedString,并非所有这些都可以独立调整.其中一些(至少是粗体,字体和字体大小)都需要传递a UIFont,这将为该区域设置所有这些属性(即使您只想设置一个).看作单个区域可能包括多个面和大小,这将导致天真的方法打破了许多现有的格式.

有没有推荐的方法来实现这一目标?我认为我唯一的选择是遍历我想要应用它的区域的属性,将其分组为具有相同其他字体属性的块,然后单独应用于每个块.

CRD*_*CRD 7

您有正确的想法,并且已经为您提供了算法enumerateAttribute:inRange:options:usingBlock:.要使用它来处理字体运行:

[myAttributedString enumerateAttribute:NSFontAttributeName
                               inRange:selectedRange
                               options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
                            usingBlock:addBoldBlock
]
Run Code Online (Sandbox Code Playgroud)

其中addBoldBlock获取当前字体(作为块的第一个参数提供),添加粗体,并将其应用于当前块(作为块的第二个参数提供).