5

MSMutableAttributedStringdisplayContentがあります。コンテンツの属性は文字列全体で異なります。つまり、色とフォントサイズは文字によって異なります。

文字列の最後に新しい文字を追加し、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のプロパティを設定するなど、これを行うためのより洗練された方法があることを望んでいました。

4

1 に答える 1

14

私は偶然にこれに対する解決策を見つけたと思います、そして私が自分自身のために作成した問題(あなたの問題の反対)への答えを探している間にこのページを見つけました。

次の場合:

[[displayContent mutableString] appendString:newCharacter];

あなたはnewCharacterそれをカバーするために追加された前の属性が「引き伸ばされた」状態になるでしょう。ただし、この動作が文書化されている場所はどこにも見つかりません。そのため、信頼することにうんざりしている可能性があります。

于 2011-06-13T01:04:52.200 に答える