UILabel 和 UITextView 都能添加 NSAttributedString 属性字符串,通过这一点,可以实现带有属性的文字和文字内包含图片的文本内容展示.


效果如下: 
 

1-初始化可变属性字符串

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:textString];

2-设置全局字体属性(设置字体大小为14)

[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, textString.length)];

[attributedString addAttribute:NSKernAttributeName value:@1 range:NSMakeRange(0, textString.length)];

上面两句代码可以简写为一句(为属性字符串同时添加多个属性)

[attributedString addAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14],NSKernAttributeName: @1} range:NSMakeRange(0, textString.length)];

3-修改标题文字属性

通过字符串获取范围

[attributedString addAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:26],NSForegroundColorAttributeName: [UIColor blueColor]} range:[textString rangeOfString:@"360云盘服务转型公告"]];

4-获取一大段文字范围并修改属性

通过前后字符串获取大段字符的范围

// 此方法可以通过string获得范围进行修改

NSRange startRange = [textString localizedStandardRangeOfString:@"我们即将采取以下措施:"];

NSRange endRange = [textString localizedStandardRangeOfString:@"感谢您的一路相伴。"];

[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSUnionRange(startRange, endRange)];

5-为文本添加下划线

// 设置文本下划线

NSRange startRange1 = [textString localizedStandardRangeOfString:@"因此,"];

NSRange endRange1 = [textString localizedStandardRangeOfString:@"之后转型企业云服务。"];

[attributedString addAttribute:NSUnderlineStyleAttributeName value:@1 range:NSUnionRange(startRange1, endRange1)];

6-为文本内文字添加描边

// 设置文本的描边

[attributedString addAttribute:NSStrokeWidthAttributeName value:@2.0 range:[textString rangeOfString:@"存储传播非法文件、侵权盗版牟利、传播淫秽色情信息等违法犯罪行为"]];

[attributedString addAttribute:NSStrokeColorAttributeName value:[UIColor brownColor] range:[textString rangeOfString:@"存储传播非法文件、侵权盗版牟利、传播淫秽色情信息等违法犯罪行为"]];

[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:17] range:[textString rangeOfString:@"存储传播非法文件、侵权盗版牟利、传播淫秽色情信息等违法犯罪行为"]];

7-为文本添加图片附件

// 插入图片附件

NSTextAttachment *imageAtta = [[NSTextAttachment alloc] init];

imageAtta.bounds = CGRectMake(0, 0, 375, 180);

imageAtta.image = [UIImage imageNamed:@"360"];

NSAttributedString *attach = [NSAttributedString attributedStringWithAttachment:imageAtta];

[attributedString insertAttributedString:attach atIndex:0];

8-为文本设置段落属性

// 段落样式

NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc]init];

// 行间距

[style setLineSpacing:3];

// 段落间距

[style setParagraphSpacing:6];

// 首行缩进

[style setFirstLineHeadIndent:25];

[attributedString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(1, textString.length)];

9-添加网址链接

// 网址链接

NSRange urlRange = [textString rangeOfString:@"yunpan.360.cn"];

[attributedString addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://yunpan.360.cn"] range:NSMakeRange(urlRange.location, 14)];

[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(urlRange.location, 14)];

10-通过UITextViewDelegate代理方法,监听URL和附件的点击

#pragma mark ----------UITextViewDelegate----------

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction { NSLog(@"%@",URL); return YES; }

- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction { NSLog(@"%@",textAttachment.image); return YES; }

补充:常用属性字符串属性

// 字体 NSFontAttributeName // UIFont, default Helvetica(Neue) 12

// 段落 NSParagraphStyleAttributeName // NSParagraphStyle, default defaultParagraphStyle

// 文字颜色 NSForegroundColorAttributeName // UIColor, default blackColor

// 背景颜色 NSBackgroundColorAttributeName // UIColor, default nil: no background

// 描边颜色 NSStrokeColorAttributeName // UIColor, default nil: same as foreground color

// 描边宽度 NSStrokeWidthAttributeName // NSNumber containing floating point value, default 0

// 阴影 NSShadowAttributeName // NSShadow, default nil: no shadow

// 附件 NSAttachmentAttributeName // NSTextAttachment, default nil

// 链接URL NSLinkAttributeName // NSURL (preferred) or NSString

// 基线偏移量 NSBaselineOffsetAttributeName // NSNumber containing floating point value,default 0

// 下划线 NSUnderlineColorAttributeName // UIColor, default nil: same as foreground color

转自:http://blog.csdn.net/Mazy_ma/article/details/52920596

利用NSAttributedString实现图文混排的更多相关文章

  1. 利用YYLabel 进行图文混排+高度计算

    利用YYLabel 进行图文混排+高度计算 1.项目需求: 用一个控件显示图片和文字,并且依据图片和文字动态计算控件的高度. 2.方案: 利用YYLabel控件和属性字符串处理. 注:(在使用YYLa ...

  2. 用NSAttributedString实现简单的图文混排

    iOS7以后,因为TextKit的强大,可以用NSAttributedString很方便的实现图文混排(主要是利用了NSTextAttachment). 关于Textkit的牛逼之处,可以参考objc ...

  3. ios图文混排

    图文混排的形式 1. 富文本形式 2. core Text(文字排版) 3. TextKit 4. UIWebView 一.富文本 我们可以采用attributeString来进行图文混排.例如一个文 ...

  4. CoreText实现图文混排

    CoreText的介绍 Core Text 是基于 iOS 3.2+ 和 OSX 10.5+ 的一种能够对文本格式和文本布局进行精细控制的文本引擎.它良好的结合了 UIKit 和 Core Graph ...

  5. iOS开发 - 第05篇 - 项目 - 12 - 图文混排

    1.首页微博文字处理 对于之前微博项目中首页:微博文字中的用户名.话题.链接等文字须要高亮显示.表情字符串须要显示相应表情. 思路: 1>之前微博中的文字使用NSString,要达到不同文字的高 ...

  6. Coretext实现图文混排及Gif图片播放

    CoreText是iOS3.2推出的一套文字排版和渲染框架,可以实现图文混排,富文本显示等效果. CoreText中的几个重要的概念:  CTFont CTFontCollection CTFontD ...

  7. EditText图文混排

    下面就具体说一下我遇到的问题,首先是EditText里面的图文混排问题,这个问题的难点就是三点: 1.怎么插图片 2.怎么保存插入的图片和文字 3.怎么解析回图片和文字 解决: 一.怎么插入图片 在这 ...

  8. UITextView实现图文混排效果

    用UITextView实现图文混排效果的展示,首先要禁用UITextView的编辑功能,将属性editable设置为NO 1.首先创建一个NSTextAttachment对象,这个对象有一个image ...

  9. CoreText 实现图文混排

    CoreText 实现图文混排 相关博文推荐 IOS CoreText.framework - 基本用法 IOS CoreText.framework - 段落样子CTParagraphStyle h ...

随机推荐

  1. linux基础命令-文件查看类命令cat/tac/more/less/tail/head

    cat 查看文本文件内容 -b :给每一行编号不包括空白行 -n:给所有行编号 [root@host01 tmp]# cat -An /root/anaconda-ks.cfg # Kickstart ...

  2. ansible安装php

    环境:Centos 7.x 独立php-fpm.conf配置文件 [root@master playbook]# tree php php ├── php-fpm.conf └── php.yml p ...

  3. April 21 2017 Week 16 Friday

    Courage is like a muscle. We strengthen it with use. 勇气就像肌肉,越使用越强大. Most often it is true, but somet ...

  4. 【2017-06-17】QtGui基础控件:QSpinBox及QDoubleSpinBox

    今天开始一个新的系列,主要是翻译并摘录QtGui中基础空间的常用方法,并做一些简单的实验程序: 我觉得这是一个炒冷饭的行为,但有时候冷饭不能不炒,不热不好吃,而且也很容易发霉. 其实到现在这种状态,对 ...

  5. 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据

    比如我创建了一个Sales Order(销售订单)后,如何用代码的方式取出这些通过SAP Partner determination自动填充的Involved Parties信息呢? 一种方法可以使用 ...

  6. git 分之合并和冲突解决

    Git 分支管理和冲突解决 创建分支 git branch 没有参数,显示本地版本库中所有的本地分支名称. 当前检出分支的前面会有星号. git branch newname 在当前检出分支上新建分支 ...

  7. 【UOJ83】【UR #7】水题出题人(提交答案题)

    点此看题面 大致题意: 给你若干份排序的代码,共\(6\)个子任务,每个子任务让你构造数据使得一份代码用时在给定的\(T\)以内,另一份代码用时超过\(2000000\). 子任务\(1\):归并排序 ...

  8. python 爬poj.org的题目

    主要是正则表达式不熟练,基础知识不扎实,函数也不怎么会用,下次再深入了解这3个函数吧. 主要是一个翻页的功能,其实,就是通过一个url替换一下数字,然后得到一个新的url,再找这个新的链接的信息. # ...

  9. 2017.10.28 针对Java Web应用中错误异常处理方法的运用

    针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...

  10. 2017.9.27 JavaWeb 属性的设置和获取

    3.4.3新属性的设置和获取 对于getpParamter方法是通过参数传递获得数据, 设置数据的方法格式: void  request.setAttribute("key",Ob ...