iOS:NSAttributedString

NSAttributedString管理一个字符串,以及与该字符串中的单个字符或某些范围的字符串相关的属性。NSAttributedString就是用来存储一串文字以及文字的诸如大小、颜色、字体等attribute的带属性的字符串,具体实现时,NSAttributedString维护了一个NSString,用来保存最原始的字符串,另有一个NSDictionary用来保存各个子串/字符的属性。

创建 Attributed String

有3种方法创建Attributed String。

1. 使用initWithString:, initWithString:attributes:, 或者 initWithAttributedString: ,下面是一个实例代码:

NSFont *font = [NSFont fontWithName:@"Palatino-Roman" size:14.0];
NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObject:font
                                    forKey:NSFontAttributeName];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"strigil"
            attributes:attrsDictionary];

可以看到上面创建的整个字符串关联了Font属性。如果希望只是对某一范围的字符串施加某个属性应该使用NSMutableAttributedString的 setAttributes:range:方法。这里例子是使用了Font属性,在Appkit中特殊定义了若干属性,这些属性被用于Core Text中。其他的属性包括前景色、背景色、是否有shadow等,具体可见本文

2. 使用initWithRTF:documentAttributes:, initWithRTFD:documentAttributes:, and initWithRTFDFileWrapper:documentAttributes:从rich text (RTF) 或者 rich text with attachments (RTFD) 数据中创建。

NSData *rtfData = ...;  // assume rtfData is an NSData object containing valid RTF data
NSDictionary *docAttributes;
NSSize paperSize;

NSAttributedString *attrString;

if ((attrString = [[NSAttributedString alloc]
        initWithRTF: rtfData documentAttributes: &docAttributes])) {

    NSValue *value = [docAttrs objectForKey:@"PaperSize"];
    paperSize = [value sizeValue];
    // implementation continues...

3. 使用initWithHTML:documentAttributes: 和 initWithHTML:baseURL:documentAttributes:从HTML数据中创建。有线程安全问题,使用时需要注意。

对RTF和HTML的支持都是AppKit对NSAttributedString的扩展。

Accessing Attributes

从上面对这个类的介绍可以知道,如果我们要访问某个子串/字符的属性,需要提供子串的位置和属性的名字,而如果不提供属性名字,那就把所有属性都返回。下面就是其对应的APIs:

attributesAtIndex:effectiveRange:
attributesAtIndex:longestEffectiveRange:inRange:
attribute:atIndex:effectiveRange:
attribute:atIndex:longestEffectiveRange:inRange:
fontAttributesInRange:
rulerAttributesInRange:

fontAttributesInRange: 和 rulerAttributesInRange: 是由AppKit扩展的属性。

修改 Attributed String

NSMutableAttributedString提供若干方法,即可以修改字符串,又可以修改字符串的属性。经过多次修改后,有些信息可能变的不一致了,为了让信息保持一致,可以使用下面的方法:

fixAttributesInRange:
fixAttachmentAttributeInRange:
fixFontAttributeInRange:
fixParagraphStyleAttributeInRange:
beginEditing
endEditing

这些方法都是AppKit的扩展功能。

时间: 2024-10-01 02:48:08

iOS:NSAttributedString的相关文章

[iOS] 利用 NSAttributedString 进行富文本处理

/iOS /[iOS] 利用 NSAttributedString 进行富文本处理 2016年4月4日 刘小龙 iOS 许多时候我们需要以各种灵活的形式展现文本信息,即富文本.普通的 text 属性显然无法满足要求,这时我们需要利用 Foundation 中的 NSAttributedString--属性字符串进行设置.拥有文本显示功能(text 属性)的 UI 控件也都拥有 attributedText 属性. 常用方法 和 NSString 及 Foundation 框架其它集合一样,NSA

自学ios:segues

action seques['segwei] 联线: 1) modal: slide a scene from the bottom to the top, covered on the parent scene. 2) push: slide from right to left. 3) custom 自学ios:segues,布布扣,bubuko.com

自学ios:first day 基本概念

ios对我而言只有初步的印象:没有android的版本碎片化的头痛但却有封闭体系的控制. 作为一个ios开发者,必须掌握: oc 大的概念,比如内存管理,委托,存档等. 框架.终极目标是知道如何使用每个框架下每个类的每个方法.这是个耗时的事情,因为有超过3000个方法和200个类.而且还与日俱增.所以能搜索文档并理解文档内容就比较重要. 经常会看到代码里的有: NS:NextStep -:instance method, 实体方法,依赖于一个类的一个实例: +:class method, 类方法

iOS: 让键盘消失的的4种方法

转自:http://leopard168.blog.163.com/blog/static/168471844201422121310352/ 在iOS app中,只要用到编辑框(UITextField)的地方,就得处理键盘消失 (dismiss keyboard). 我先后用过4种方法,来处理键盘消失的问题. 1. 通过UITextFiledDelegate,来释放第一响应者 (resignFirstResponder): 这种通过delegate释放键盘的代码如下: -(BOOL)textF

ios:设置视图背景图片的方法

1. 使用一个UIImageView实例做子视图,并且放最后面UIImageView *customBackgournd = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.jpg"]];self.background = customBackground;[customBackground release]; [self addSubview:background];[self sendSubVie

学习iOS:第一天

今天开始学习iOS开发,当然是从stanford得iOS 7教程开始了,学习了lecture 1,涉及到得知识如下. iOS从下而上的4层框架:Core OS, Core Services, Media, Cocoa Touch, 在apple的官方文档iOS Developer Library中有介绍这4层,Core OS层管理虚拟内存.线程.文件系统.网络等,包含了内核环境.驱动.iOS基本接口.Core Services层提供基本的iOS服务,如访问文件.低级别数据类型.Bonjour服务

自学ios:second day Objective-C

oc 是 c 的超集,从c扩展而来,具备面向对象的特性,比如类,消息,单继承. c的部分: 数据类型: short,int,long,float,double,char,pointer,struct 常用方法: readline() atoi() sizeof() malloc() oc的部分: receiver:classNameOrObject selector:method 消息的传递通过[receiver selector]实现, eg:NSDate *now = [NSDate dat

自学ios:third day Objective-C 常用class

NSString:它的实例可以包含任意的Unicode字符 eg: NSString *name = @"jethro"; //@"..." 是一种oc简化写法 自学ios:third day Objective-C 常用class

iOS:解决pod的Insecure world writable dir问题

当我们运行pod setup的命令的时候,有时候会碰到这个警告: /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.33.1/lib/cocoapods/executable.rb:55: warning: Insecure world writable dir /usr/local in PATH, mode 040777 要去除这个警告,我们需要更改/usr/local的权限,一句话: sudo chmod go-w /usr/local DONE iOS: