我有一個MSMutableAttributedString displayContent。 內容的屬性在字符串 中有所不同,即顏色和字體大小可能因字母而異。appendAttributedString:在NSMutableAttributedString
我想添加一個新的字符到字符串的末尾,併爲它提取displayContent中最後一個字符的屬性。由於受用戶控制,我無法預先知道這些屬性是什麼。
當我追加新角色(tempAttr):
NSAttributedString * tempAttr = [[NSAttributedString alloc] initWithString:appendage];
[displayContent appendAttributedString:tempAttr];
它似乎整個字符串的屬性重置爲新角色的屬性(我沒有設置
因爲我不能知道他們需要什麼)。
如何獲取tempAttr來獲取displayContent中最後一個字符的屬性? 謝謝。
更新。 以笨拙但功能性的方式取得了進步。 複製的屬性從顯示器(displayContent)的最後一個字符字典,然後重新添加這些屬性到新的角色:
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的屬性。
非常感謝這篇文章。我用你的代碼替換了代碼,它工作正常。謝謝。任何洞察這爲什麼這個作品? mutableString方法簡單地返回了attributesString的字符串內容。 Doc沒有提及任何關於這些屬性的複製。所以,我沒有看到appendString從哪裏獲取正確的屬性。 – 2011-06-13 21:36:45
我不知道。我無法確定它是否是實現細節(即可能會改變的副作用/行爲),或者它是否是實際的預期行爲。但考慮到它與顯然有它自己的屬性的「appendAttributedString:」相反,我可以看到推理擴展底層字符串應該導致屬性繼續。這就是說,它是如何連接在一起的,我不知道。 – 2011-06-17 00:39:29
@BenCochran你說得對,沒有什麼特別提到的屬性伸展,但文檔確實說:'接收器跟蹤這個字符串的變化,並保持其屬性映射最新。「這似乎是發生了什麼。 – 2014-07-25 06:02:11