很多时候需要用到图文混排,例如聊天气泡中的表情,空间、微博中的表情,例如下图:
红心和文字在一起。
比较复杂的情况是表情夹杂在文字之间。
要实现这种功能,首先要介绍iOS中用于显示属性文字的类。
用于文字显示的类除了text属性之外,还有attributedText属性,这个属性是NSAttributedString类型,通过这个属性可以实现不同文字的不同字体、颜色甚至把图片作为文字显示的功能。
下面介绍这个字符串的使用。
以一条微博内容为应用场景,介绍如何从中找出表情、话题等内容,其中表情替换成表情图片,话题等高亮显示。
这里用到的内容主要有:正则表达式、NSAttributedString、NSTextAttachment等知识。
【正则表达式】
正则表达式在上一节(一一〇)正则表达式的基本使用与RegexKitLite的使用中有介绍,主要是为了找出所有特殊位置和非特殊位置。
【NSAttributedString】
这是一种能够对特定范围的文字设置属性、显示图片等功能。
下面介绍通过普通字符串初始化NSAttributedString,并且把其中的表情([<表情名称>])、话题(#<话题内容>#)、URL全部高亮的方法。
①通过微博字符串text初始化一个属性字符串。
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text];
②指定匹配规则。
NSString *emotionPattern = @"\\[[a-zA-Z\\u4e00-\\u9fa5]+\\]";
NSString *topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
NSString *urlPattern = @"[a-zA-z]+://[^\\s]*";
NSString *pattern = [NSString str