(转)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的字符串编码是不固定的,因此,需要设置一个统一的编码格式,将所有其他格式的字符串都转化为统一的格式,然后就可 ...
随机推荐
- [題解]luogu_P1613跑路(最短路/倍增)
首先要知道不能跑最短路,因為只有整2^k才能一秒到達,和倍增有關 所以我們想知道任意兩點間能否存在一條2^k長度的路徑,數據很小,可以考慮floyd 把倍增和floyd結合起來考慮發現如果i到k,k到 ...
- 项目用Git上传到coding
关于这样的东西,网上很多教程,这里就结合自己看的还有自己的例子来说明一下吧: 1.你得下载一个git软件并成功安装 2.生成ssh: 关于这个,我觉得似乎不是一定的,因为通过https也可以连接到co ...
- 如何在cmd中运行PHP
我的php安装目录在 d:\php 那么 运行 cmd >d: >cd php 要让工作目录指向php.exe的安装文件夹 然后就可以用php指令了 比如 在该文件夹下面新建一个test. ...
- Mysql优化配置
Mysql配置优化 一.环境介绍 Mysql版本:5.5.27 二.优化内容 字段 介绍 推荐值 skip-locking 避免MySQL的外部锁定,减少出错几率增强稳定性 back_log MySQ ...
- php 几个比较实用的函数
最近在看代码,发现以下是几个比较实用的函数. 1,取客户端IP 查看复制打印? function getOnlineIp() { $strOnlineIp = ""; if(get ...
- react-native入门学习( 一 )
开发环境配置 因为个人电脑是windows7环境,所以在选择安装react-native 环境的时候是用的 windows+androidreact-native中文网文档地址 https://re ...
- 解决Git在更新项目时报凭证错误(Authentication failed)
报此错误,大概率原因是用户名和密码弄错了,我用的阿里云,在网上找了半天发现Git远程仓库用的用户名和密码不是阿里云登陆用的账户密码,必须另外设置: 链接:code.aliyun.com/profile ...
- 断言assert用法
本文转自:http://blog.jobbole.com/76285/ 这个问题是如何在一些场景下使用断言表达式,通常会有人误用它,所以我决定写一篇文章来说明何时使用断言,什么时候不用. 为那些还不清 ...
- 2566. [51nod 1129] 字符串最大值
[题目描述] 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd. 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值. 例 ...
- okhttp使用心得(https验证不通过)(一)
之前项目使用的是okhttp3.4版本的,tls协议支持1.0 1.2 等等 后来换成okhttp3.8.1,发现握手失败 找了好多原因之后 发现吧tls加上1.0后,就可以握手成功了,但是tls1 ...