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部分字体变颜色的主要内容,如果未能解决你的问题,请参考以下文章

具有不同字体大小和颜色的UILabel文本[重复]

如何在 Swift 中更改 UILabel 文本某些部分的字体属性? [复制]

Swift - 状态栏颜色显示(字体背景)

Swift:如何让 UILabel 从另一个 UIlabel 继承字体大小?

根据自动布局更改 UILabel 中的字体大小(swift)

如何使用 Swift 默认 UILabel 字体和大小