Swift 修改字符串的范围颜色 NSAttributedString NSMutableAttributedString
需求:
获取 StoryBoard
中字义的 Label
,根据需要设置 Label 内文字的一部分为一个颜色,另一部分为另一个颜色,如下图
实现所需知识
这里需要用到 NSAttributedString
和 NSMutableAttributedString
,这两个都是 iOS 中最常用的文字表示形式,它包含文字的颜色,边框,大小,字体等等等等,所有 NSAttributedString.Key
里列举的属性都可以定义。
官方文档中的说明: https://developer.apple.com/documentation/foundation/nsattributedstring/key
先说说区别:
类名 | 说明 |
---|---|
NSAttributedString | 一次生成,不能修改属性,不能修改文字内容 |
NSMutableAttributedString | 可以修改内部的属性值,不能修改文字内容 |
NSAttributedString.Key
一些常用属性的说明
属性值 | 说明 |
---|---|
.foregroundColor |
文字颜色 |
.strokeColor |
描边颜色 |
.strokeWith |
描边大小 |
.font |
字体: 相关字体的属性去字体里面设置,大小,字体类型等等 |
实现
我是在一个 TableViewController
中修改 Cell
的某个 Label
,外面的代码不写了,只解释里面的关于修改字符的部分
// 1. 获取 StoryBoard 中 Label 的原有属性
let attributes = cell.labelTitle.attributedText!.attributes(at: 1, effectiveRange: NSRangePointer(bitPattern: 0))
// 2. 创建新的可编辑的字符对象
let mString = NSMutableAttributedString(string: String(sample.temperature),
attributes: attributes)
// 3. 在生成的 NSMutableAttributedString 对象中修改前两位的颜色
mString.setAttributes(
[NSAttributedString.Key.foregroundColor : UIColor.black],
range: NSRange(location: 0, length: 2)
)
// 4. 修改后面剩余字符的颜色
mString.setAttributes(
[NSAttributedString.Key.foregroundColor : Colors.magenta],
range: NSRange(location: 3, length: mString.string.count - 3)
)
// 5. 把修改好的 NSMutableAttributedString 重新赋值给 Label
cell.labelTitle.attributedText = mString
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。