8

使用 UITextView 时,我尝试将自定义属性添加到属性字符串。但是,在分配给 UITextView 的属性文本后,所有自定义键都会丢失。像这样:

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 对象中存储属性名称下的值,该对象又与 NSRange 相关联,该 NSRange 指示字典属性适用的字符。除了标准属性之外,您还可以将任何您希望的属性名称-值对分配给一系列字符。

它适用于标准和NSTextStorage(文本工具包)支持的 UITextViews。

于 2013-09-23T15:51:23.710 回答
6

根据评论,您正试图滥用NSAttributedString. NSAttributedString并且UITextView仅设计用于处理记录的属性。您最初可能能够在字符串中存储自定义属性,但是一旦文本视图开始处理属性文本并且您向文本视图询问最新的属性文本,文本视图早就摆脱了任何自定义属性。

更好的解决方案是创建一个扩展 UITextView 的类。您的子类应该添加一个可以包含您想要的任何自定义属性的属性。或者,您的自定义类可能会覆盖attributedText和 'setAttributedText:` 方法。这些将负责保存和恢复在属性字符串中找到的任何自定义属性。

注意:此答案适用于 iOS 6 及更早版本。对于 iOS 7,请参阅下面的 @julien_c 答案。

于 2012-11-30T16:16:01.550 回答
3

UITextView 并不真正显示属性字符串。Apple 有一个内部类 NSHTMLWriter,它将集合 NSAttributedString 转换为 HTML 数据,然后由内容 UIWebDocumentView(本质上是 Webkit)显示

在这里查看我的分析:http: //www.cocoanetics.com/2012/12/uitextview-caught-with-trousers-down/

于 2012-12-21T19:26:11.697 回答