8

UITextViewを使用する場合、属性付き文字列にカスタム属性を追加しようとします。ただし、UITextViewのattributedTextに割り当てた後、すべてのカスタムキーは失われます。このような:

NSMutableAttributedString *lString = [[ NSMutableAttributedString alloc ] initWithString: @"astring"
                                             attributes: @{ @"customkey": @"customvalue" }];
NSLog(@"string: %@", lString);  // shows customkey present
textView.attributedText = lString;
NSLog(@"result: %@", self.textView.attributedText);   // shows customkey missing

これは機能するはずですか?

4

3 に答える 3

18

iOS 7以降、希望どおりに機能するようになりました。

属性へのアクセスから:

属性付き文字列は、名前で属性を識別し、NSDictionaryオブジェクトの属性名の下に値を格納します。NSDictionaryオブジェクトは、ディクショナリの属性が適用される文字を示すNSRangeに関連付けられます。標準の属性に加えて、任意の属性の名前と値のペアを文字の範囲に割り当てることができます。

これは、標準およびNSTextStorage(テキストキット)でサポートされているUITextViewの両方で機能します。

于 2013-09-23T15:51:23.710 に答える
6

コメントに基づいて、あなたは誤用しようとしていますNSAttributedStringNSAttributedString文書化された属性を処理するためにUITextViewのみ設計されています。最初はカスタム属性を文字列に保存できる場合がありますが、テキストビューが属性付きテキストの処理を開始し、テキストビューに最新の属性付きテキストを要求すると、テキストビューは長い間カスタム属性を削除します。

より良い解決策は、UITextViewを拡張するクラスを作成することです。サブクラスは、必要なカスタム属性を保持できるプロパティを追加する必要があります。または、カスタムクラスがattributedTextおよび'setAttributedText:`メソッドをオーバーライドする場合もあります。これらは、属性付き文字列で見つかったカスタム属性の保存と復元を処理します。

注:この回答はiOS6以前に適用されます。iOS 7については、以下の@julien_cの回答を参照してください。

于 2012-11-30T16:16:01.550 に答える
3

UITextViewは、実際には属性付き文字列を表示しません。Appleには、セットNSAttributedStringをHTMLデータに変換する内部クラスNSHTMLWriterがあり、コンテンツUIWebDocumentView(基本的にはWebkit)によって表示されます。

ここで私の分析を参照してください:http://www.cocoanetics.com/2012/12/uitextview-caught-with-trousers-down/

于 2012-12-21T19:26:11.697 に答える