IOS开发路上的故事iOS开发

使用NSMutableAttributedString实现富文本

2016-01-28  本文已影响2255人  国民希大大

最近在项目开发的过程中遇到了几种比较坑的情况(不同颜色字体、下划线、图文混排等),所以回头重新看了看富文本。


一、有必要介绍一下将一串字符串显示到屏幕上的内部实现机制

简单来说,是通过控件来完成的,而这些控件都封装在UIKit框架中(对于Mac OS X是AppKit框架),在UIKit中常用来在屏幕上显示字符串的常用控件有3个:

UILabel

UITextField

UITextView

然而这些控件本身对文本的展现方式很单一,通常仅仅能够控制字体样式、大小、颜色、加粗、斜体等等,而对于行距控制,字距控制,段落控制等高级功能却无能为力。

此时不免要提起一个非常强大的文本排版框架CoreText.framework。

CoreText框架是基于 iOS 3.2+ 和 OSX 10.5+ 的一种能够对文本格式和文本布局进行精细控制的文本引擎。它良好的结合了 UIKit 和 Core Graphics/Quartz:

UIKit 的 UILabel :允许你通过在 IB 中简单的拖曳添加文本,但你不能改变文本的颜色和其中的单词。

Core Graphics/Quartz:几乎允许你做任何系统允许的事情,但你需要为每个字形计算位置,并画在屏幕上。

CoreText:正结合了这两者!你自己可以完全控制位置、布局、类似文本大小和颜色这样的属性,CoreText将帮你完善其它的东西——类似文本换行、字体呈现等等。

苹果引入TextKit的目的并非要取代已有的CoreText框架,虽然CoreText的主要作用也是用于文字的排版和渲染,但它是一种先进而又处于底层技术,如果我们需要将文本内容直接渲染到图形上下文(Graphics context)时,从性能和易用性来考虑,最佳方案就是使用CoreText。而如果我们需要直接利用苹果提供的一些控件(如UITextView、UILabel和UITextField等)对文字进行排版,那么借助于UIKit中TextKit提供的API无疑更为方便快捷。


二、废话不多说,看一下NSMutableAttributedString使用方法

1.    实例化方法和使用方法

实例化方法:

使用字符串初始化

- (id)initWithString:(NSString *)str;

例:

img-1

迷宫

- (id)initWithString:(NSString *)str attributes:(NSDictionary *)attrs;

字典中存放一些属性名和属性值,如:

img-2

- (id)initWithAttributedString:(NSAttributedString *)attester;

使用NSAttributedString初始化,跟NSMutableString,NSString类似

使用方法:

为某一范围内文字设置多个属性

- (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

为某一范围内文字添加某个属性

- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;

为某一范围内文字添加多个属性

- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;

移除某范围内的某个属性

- (void)removeAttribute:(NSString *)name range:(NSRange)range;

2.    常见的属性及说明

NSFontAttributeName                         字体

NSParagraphStyleAttributeName         段落格式

NSForegroundColorAttributeName      字体颜色

NSBackgroundColorAttributeName      背景颜色

NSStrikethroughStyleAttributeName    删除线格式

NSUnderlineStyleAttributeName          下划线格式

NSStrokeColorAttributeName              删除线颜色

NSStrokeWidthAttributeName             删除线宽度

NSShadowAttributeName                    阴影

更多方法和属性说明详见苹果官方说明文档:

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003689

3.  使用实例介绍

img-3

另外,其他可以设置text 的控件(如UIButton,UITextField)也都有该属性,该文章不够详细,只是简单介绍,其他效果的实现参考API中更多的属性及使用方法。

参考;http://snowyshell.blog.163.com/blog/static/2209140342014475383375/

上一篇下一篇

猜你喜欢

热点阅读