Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中与Swift一起使用NSAttribute字符串?_Ios_Swift_String_Uilabel_Nsattributedstring - Fatal编程技术网

如何在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编辑器构建属性化文本似乎更简单、更清晰。