如何在iOS中与Swift一起使用NSAttribute字符串?
我希望有一个带有属性字符串的标签,该字符串在运行时动态变化。像这样的如何在iOS中与Swift一起使用NSAttribute字符串?,ios,swift,string,uilabel,nsattributedstring,Ios,Swift,String,Uilabel,Nsattributedstring,我希望有一个带有属性字符串的标签,该字符串在运行时动态变化。像这样的 是否有更好的方法可以动态更改价格值,而无需硬编码属性键字典和手动构建NSAttributedString?在iOS上处理属性字符串的最佳方法是使用interface builder中的内置属性文本编辑器,并避免不必要的硬编码源文件中的NSATributedStringKey 稍后,您可以使用以下扩展在运行时动态替换PlaceHoders: 扩展NSAttribute字符串{ func替换(占位符:String,使用value
是否有更好的方法可以动态更改价格值,而无需硬编码属性键字典和手动构建
NSAttributedString
?在iOS上处理属性字符串的最佳方法是使用interface builder中的内置属性文本编辑器,并避免不必要的硬编码源文件中的NSATributedStringKey
稍后,您可以使用以下扩展在运行时动态替换PlaceHoders:
扩展NSAttribute字符串{
func替换(占位符:String,使用valueString:String)->nsAttribute字符串{
如果let range=self.string.range(of:placeholder){
设nsRange=nsRange(范围,单位:valueString)
让mutableText=NSMutableAttributedString(attributedString:self)
mutableText.replaceCharacters(在:nsRange中,带:valueString)
将可变文本作为NSAttributedString返回
}
回归自我
}
}
添加带有属性文本的情节提要标签,如下所示
然后,您只需在每次需要时更新值,如下所示:
label.attributeText=initAlatAttributedString。替换(占位符:“”,替换为:newValue)
确保将原始值保存到initAlatAttributedString中
通过阅读本文,您可以更好地理解这种方法:
可能不知道,这是您正在寻找的,但会解决您的问题 您可以为每个属性使用标签,并且在不接触属性字符串的情况下轻松更新数量 结果如下: 示例代码,我已尝试此演示:
@IBOutlet weak var lblAmount: UILabel!
func pricelabel() -> Void {
var amount = 0
Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { (timer) in
amount += 10
self.lblAmount.text = "\(amount)"
}.fire()
}
这里面有什么问题?没有具体的问题,只是在寻找一种更好的方法来避免NSAttributedStringKey硬编码,我认为Efraim的答案是正确的。答案很好。不过需要注意的是,对文档的解释是:“新字符继承了目标范围内第一个替换字符的属性。”这意味着如果目标范围内的字符串在该范围内具有不同的属性,则这些差异将丢失。例如,如果您尝试将“Price:32”替换为“Price:25”数字上的粗体红色属性将丢失,数字的文本属性将与原始属性字符串开头的单词“Price”相同。为了保留起始字符串的属性,您必须逐段替换具有不同属性的子字符串。您可以始终保留模拟的原始副本,类似于以下价格:(净值)并使用label.attributeText=label.attributeText?。替换(占位符:“”,使用:newValue)。请阅读我的媒体文章,以便更好地理解这一点。谢谢!但我认为处理一个标签比处理三个不同的标签更容易。从interface builder编辑器构建属性化文本似乎更简单、更清晰。