实现需求
这篇文章源于群友的一个问题:如何把『注:此商品只能整件(12的倍数发货),已选1袋,还差11袋』这段文字中的数字使用红色在 UILabel 中显示?
实现思路
我们可以使用UILabel 的 attribute string 属性,通过正则表达式匹配获取数字的范围,然后添加对应的 attribute。
实现代码
下面是实现代码,使用 swift 3.0 编写:
代码如下 | 复制代码 |
//根据正则表达式改变文字颜色 func changeTextChange(regex: String, text: String, color: UIColor) -> NSMutableAttributedString { let attributeString = NSMutableAttributedString(string: text) do{ let regexExpression =tryNSRegularExpression(pattern: regex, options: NSRegularExpression.Options()) let result = regexExpression.matches(in: text, options: NSRegularExpression.MatchingOptions(), range: NSMakeRange(0, text.characters.count)) foritem in result { attributeString.addAttribute(NSForegroundColorAttributeName, value: color, range: item.range) } }catch{ print("Failed with error: (error)") } returnattributeString } let text ="注:此商品只能整件(12的倍数发货),已选1袋,还差11袋" let renderLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 800, height: 30)) renderLabel.textAlignment = NSTextAlignment.center renderLabel.backgroundColor = UIColor.lightGray renderLabel.font = UIFont.boldSystemFont(ofSize: 20) renderLabel.attributedText = changeTextChange(regex:"\d+", text: text, color: UIColor.red) |
可以把以上这段代码放到 playground 里面运行。
当然,这里可以不使用正则表达式,用其他方法也可以做到,但是正则表达式的做法比较灵活,以后如果有新的需求可以直接修改正则表达式就可以实现。
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级