美文网首页IOS开发路上的故事iOS开发
使用NSMutableAttributedString实现富文本

使用NSMutableAttributedString实现富文本

作者: 国民希大大 | 来源:发表于2016-01-28 01:51 被阅读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/

    相关文章

      网友评论

        本文标题:使用NSMutableAttributedString实现富文本

        本文链接:https://www.haomeiwen.com/subject/ozxjkttx.html