(转)iOS 属性字符串
富文本的基本数据类型是NSAttributedString
。**属性化字符串**(attributed string)是把属性设置到某些字符上的字符串。属性可以是任何键值对,但是为了实现富文本,则通常会包含样式信息,比如字体、颜色和缩进。
通常使用NSMutableAttributedString
更好,这样我们就可以修改字符串各部分的属性。NSAttributedString
则需要字符串的属性保持不变。
下面的例子将创建一个基本的矩形布局来在UITextView
中显示一些富文本。相应的工程可以在名为RichText的示例代码中找到。首先,在Interface Builder中添加一个UITextView
并且把模式选择为Attributed;然后,创建一个NSAttributedString
并设置一些属性。在本例中,我们会创建一个字符串,然后对整个字符串设置字体属性。
ViewController.m(RichText)
1 |
const CGFloat fontSize = 16.0; // 创建基本字符串。 |
正如26.2.1节所讨论的那样,要设置粗体,需要设置不同的字体。对于系统字体来说这很简单,因为请求系统字体的粗体很容易:
1 |
//用系统字体的粗体来设置粗体,搜索单词"bold" |
但是如果你用的是非系统字体,而又需要粗体或斜体变体呢?不幸的是,UIKit没有很好的办法确定字体的变体,但是Core Text有。链接了CoreText.framework
以后就可以用下面的函数了。该函数用UIFont
的名字来找到正确的CTFont
,然后用CTFontCreateCopyWithSymbolicTraits
来添加所请求的变体(比如kCTFontTraitItalic
),最后用得到的字体名称来创建正确的UIFont
。但愿将来新版本的iOS能让这个过程变得容易一些。
1 |
UIFont * GetVariationOfFontWithTrait(UIFont *baseFont, |
最后,添加合适的属性来加上颜色:
1 |
// 设置颜色 |
注意这里用了addAttribute:value:range:
而不是setAttribute:value:range
。这样可以把新属性和已有的属性合并,通常是我们所期望的结果。
设置好所有属性之后,可以给UITextView
设置attributedText
属性来显示这个字符串:
1 |
self.textView.attributedText = attrString; |
大部分具有text
属性的控件现在也会有attributedText
属性,这样转换已有的代码会容易得多。
有一点很重要,NSAttributedString
不是NSString
的子类。它包含了一个NSString
对象。类似地,NSMutableAttributedString
包含了一个NSMutableString
对象。尽管属性化字符串也有常用的字符串方法(如length
),但通常还得用string
或mutalbeString
来获取底层的字符串。
(转)iOS 属性字符串的更多相关文章
- iOS UILable和属性字符串的使用
UILable的常用方法和属性 设置文字颜色(默认为黑色) @property(nonatomic,strong) UIColor *textColor 设置显示文字 @property(no ...
- iOS依据字符串计算UITextView高度
iOS计算字符串高度,有须要的朋友能够參考下. 方法一:ios7.0之前适用 /** @method 获取指定宽度width,字体大小fontSize,字符串value的高度 @param value ...
- 属性字符串(NSAttributedString)的简单应用
属性字符串NSAttributedString 可以对字符串附加格式信息,由于对于对不同文本片段使用不同的格式,属性字符串类特别合适. IOS 6中对样式文本有了大改善,大部分主要的UIKit控件都允 ...
- 属性字符串的replaceCharactersInRange方法
一,实验: 1> 让 range 的 length 参数为0,以下代码输出属性字符串的结果为12354 NSMutableAttributedString *attrStr = [[NSMuta ...
- NSMutableAttributedString可变属性字符串的用法
适用于:当你想对一个字符串中的某几个字符更改颜色,字体... NSString *string = @"今日营养配餐提供热量1800千卡,需要饮食之外额外补充钙10mg,铁20mg,锌9.5 ...
- 有两个地方,用到了javabean对象和属性字符串值之间的转换
1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean.通过@RequestBody javaBean方式 ...
- IOS NS 字符串 数组 字典 文件 动态 静态 操作
ios 常用字符串的操作 //将NSData转化为NSString NSString* str = [[NSString alloc] initWithData:response e ...
- iOS: 属性列表介绍 Introduction to Property Lists
iOS: 属性列表介绍 Introduction to Property Lists 从本质上说, 属性列表就是苹果的对象数据序列化与反序列化方式 属性列表使用几种数据类型把数据组织为键值表和值表 P ...
- iOS 获取字符串中的单个字符
要取到单个字符,就要知道字符串的编码方式,这样才能够定位每个字符在内存中的位置.但是,iOS的字符串编码是不固定的,因此,需要设置一个统一的编码格式,将所有其他格式的字符串都转化为统一的格式,然后就可 ...
随机推荐
- JMeter BeanShell示例
翻译:https://blog.trigent.com/jmeter-blog-series-jmeter-beanshell-example 在这个例子中,我们将演示在Apache JMeter中使 ...
- Technocup 2017 - Elimination Round 1 (Unofficially Open for Everyone, Rated for Div. 2) C
This is an interactive problem. You should use flush operation after each printed line. For example, ...
- Sawgger框架
简介详情:https://blog.csdn.net/sanyaoxu_2/article/details/80555328
- Ubuntu下修改权限时出现"unable to execute /bin/chmod: Argument list too long"
Ubuntu14.04下修改权限时出现"unable to execute /bin/chmod: Argument list too long" ,大概意思是卧槽,你这参数也 ...
- ASP.NET页面传值的方法
ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方 ...
- 五、UML类图和六大原则-----《大话设计模式》
一.单一职责原则 就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力.这种耦合 ...
- 在每天黄金时刻将数据库中数据获取包装成Excel表
过程: 1.由Timer对象实现安排指定的任务在指定的时间进行重复的固定的延迟操作 a.设定时间间隔24小时:PERIOD_DAY = 24 * 60 * 60 * 100; b.指定每天执行操作的时 ...
- jsonwebapi请求头的设置
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
- Node.js 打造实时多人游戏框架
在 Node.js 如火如荼发展的今天,我们已经可以用它来做各种各样的事情.前段时间UP主参加了极客松活动,在这次活动中我们意在做出一款让“低头族”能够更多交流的游戏,核心功能便是 Lan Party ...
- VS 2013如何编译ASM文件
1. 左键点击解决方案下面的工程 2. 点击上面菜单中的项目,此时有个生成自定义属性 3. 勾选上masm,此时就有Microsoft Macro Assembler了 https://stac ...