Swift - UILabel部分字体变颜色
Posted 崔小花o
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift - UILabel部分字体变颜色相关的知识,希望对你有一定的参考价值。
最近接了一个需求,UILabel只修改数字的字体和样色,就是需要把“今日奖金50万” 的数字加粗,变为“今日奖金50万”
因为不想搞成两个label进行拼接,所以写了一个小demo
主要思路:
- 富文本改变某个文字的字体颜色
- 使用正则表达式筛选出数字
代码:
extension String
/// 改变字符串中数字的颜色和字体
///
/// - Parameters:
/// - color: 颜色
/// - font: 字体
/// - regx: 正则 默认数字 "\\\\d+"
/// - Returns: attributeString
func numberChange(color: UIColor,
font: UIFont,
regx: String = "\\\\d+") -> NSMutableAttributedString
let attributeString = NSMutableAttributedString(string: self)
do
// 数字正则表达式
let regexExpression = try NSRegularExpression(pattern: regx, options: NSRegularExpression.Options())
let result = regexExpression.matches(
in: self,
options: NSRegularExpression.MatchingOptions(),
range: NSMakeRange(0, count)
)
for item in result
attributeString.setAttributes(
[.foregroundColor : color, .font: font],
range: item.range
)
catch
print("Failed with error: \\(error)")
return attributeString
使用:
prizeLabel.attributedText = "今日奖金50万".numberChange(color: red, font:.systemFont(ofSize: 27))
扩展性:
不只局限于数字,只要是正则可以匹配的都可以替换成想要的字体,比如邮箱,网址。
附录: 部分常用正则表达式
匹配中文字符 [\\u4e00-\\u9fa5]
匹配双字节字符(包括汉字在内) [^\\x00-\\xff]
匹配网址:[a-zA-z]+://[^\\s]*
匹配国内电话 \\d3-\\d8|\\d4-\\7,8
匹配腾讯QQ号 [1-9][0-9]4,
匹配18位身份证号^(\\d6)(\\d4)(\\d2)(\\d2)(\\d3)([0-9]|X)$
友情链接 正则表达式教程
以上是关于Swift - UILabel部分字体变颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中更改 UILabel 文本某些部分的字体属性? [复制]
Swift:如何让 UILabel 从另一个 UIlabel 继承字体大小?