首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >appendAttributedString:在NSMutableAttributedString中

appendAttributedString:在NSMutableAttributedString中
EN

Stack Overflow用户
提问于 2011-04-23 19:18:17
回答 1查看 9.3K关注 0票数 5

我有一个MSMutableAttributedString displayContent。内容的属性因字符串而异,即颜色和字体大小可能因字母而异。

我希望将一个新字符添加到字符串的末尾,并让它获取displayContent中最后一个字符的属性。我无法预先知道这些属性是什么,因为它们在用户控制之下。

当我追加新字符(TempAttr)时:

代码语言:javascript
复制
NSAttributedString * tempAttr = [[NSAttributedString alloc] initWithString:appendage];
[displayContent appendAttributedString:tempAttr];

它似乎将整个字符串的属性重置为新字符的属性(由于我不知道它们需要成为什么属性,所以没有设置这些属性)。

如何让tempAttr获取displayContent中最后一个字符的属性?谢谢。

更新。以笨拙但实用的方式在这方面取得了进展。从显示中的最后一个字符(displayContent)复制属性字典,然后将这些属性重新应用于添加的新字符:

代码语言:javascript
复制
NSMutableDictionary * lastCharAttrs = [NSMutableDictionary dictionaryWithCapacity:5];
[lastCharAttrs addEntriesFromDictionary: [displayContent attributesAtIndex:0 
                                                            effectiveRange:NULL]]; // get style of last letter
NSMutableAttributedString * tempAttr = [[NSMutableAttributedString alloc] initWithString:newCharacter 
                                                                              attributes:lastCharAttrs];

[displayContent appendAttributedString:tempAttr]; // Append to content in the display field

我本来希望有一种更优雅的方法来做到这一点,比如设置NSTextField的一个属性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-13 01:04:52

我想我偶然发现了这个问题的解决方案,然后在寻找我为自己创造的问题的答案时找到了这个页面(与你的问题相反)。

如果您做了以下操作:

代码语言:javascript
复制
[[displayContent mutableString] appendString:newCharacter];

您将最终得到附加的newCharacter和前面的属性“拉伸”来覆盖它。但是,我在任何地方都找不到这种行为的文档,所以您可能厌倦了依赖它。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5766340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档