我搜索了一个属性字符串的文档,我甚至下载了一个“Attributed String Creator”从应用商店,但最终的代码是在Objective-C,我使用的是Swift。什么是真棒,并且可能有助于其他开发人员学习这种语言,是一个清晰的例子使用在Swift中的属性字符串创建自定义字体与自定义属性。这个文档非常混乱,因为没有一个非常清楚的路径如何做。我的计划是创建属性字符串并将其添加到我的coffeeAmount字符串的末尾。
var coffeeAmount: String = calculatedCoffee + attributedText
其中computedCoffee是一个转换为字符串的Int,“attributedText”是我尝试创建的自定义字体的小写“g”。也许我要这个错误的方式。任何帮助是赞赏!
这个答案已更新为Swift 3.0。
快速参考
创建和设置属性字符串的一般形式是这样的。您可以在下面找到其他常见选项。
// create attributed stringlet myString = "Swift Attributed String"let myAttribute = [ NSForegroundcolorAttributename: UIcolor.blue ]let myAttrString = NSAttributedString(string: myString,attributes: myAttribute) // set attributed text on a UILabelmyLabel.attributedText = myAttrString
let myAttribute = [ NSForegroundcolorAttributename: UIcolor.blue ]
let myAttribute = [ NSBackgroundcolorAttributename: UIcolor.yellow ]
let myAttribute = [ NSFontAttributename: UIFont(name: "Chalkduster",size: 18.0)! ]
let myAttribute = [ NSUnderlinestyleAttributename: NSUnderlinestyle.StyleSingle.rawValue ]
let myShadow = NSShadow()myShadow.shadowBlurRadius = 3myShadow.shadowOffset = CGSize(wIDth: 3,height: 3)myShadow.shadowcolor = UIcolor.graylet myAttribute = [ NSShadowAttributename: myShadow ]
这篇文章的其余部分给了更多的细节,有兴趣的人。
属性
String属性只是一个[String:Any]形式的字典,其中String是属性的键名称,Any是某些Type的值。该值可以是字体,颜色,整数或其他。 Swift中有许多已经预定义的标准属性。例如:
>键名:NSFontAttributename,value:a UIFont
>键名:NSForegroundcolorAttributename,value:a UIcolor
>键名称:NSlinkAttributename,value:NSURL或String
还有很多其他的。更多信息参见this link。您甚至可以创建自己的自定义属性。
>键名:MyCustomAttributename,value:some类型。
在Swift中创建属性
你可以像声明任何其他字典一样声明属性。
// single attributes declared one at a timelet singleAttribute1 = [ NSForegroundcolorAttributename: UIcolor.green ]let singleAttribute2 = [ NSBackgroundcolorAttributename: UIcolor.yellow ]let singleAttribute3 = [ NSUnderlinestyleAttributename: NSUnderlinestyle.styleDouble.rawValue ]// multiple attributes declared at oncelet multipleAttributes: [String : Any] = [ NSForegroundcolorAttributename: UIcolor.green,NSBackgroundcolorAttributename: UIcolor.yellow,NSUnderlinestyleAttributename: NSUnderlinestyle.styleDouble.rawValue ]// custom attributelet customAttribute = [ "MyCustomAttributename": "Some value" ]
注意下划线样式值所需的rawValue。
因为属性只是字典,您还可以通过创建一个空的字典然后向其中添加键值对来创建它们。如果值包含多个类型,那么您必须使用Any
作为类型。这里是从上面的multipleAttributes示例,以这种方式重新创建:
var multipleAttributes = [String : Any]()multipleAttributes[NSForegroundcolorAttributename] = UIcolor.greenmultipleAttributes[NSBackgroundcolorAttributename] = UIcolor.yellowmultipleAttributes[NSUnderlinestyleAttributename] = NSUnderlinestyle.styleDouble.rawValue
属性字符串
现在你理解属性,你可以使属性字符串。
初始化
有几种方法来创建属性字符串。如果你只需要一个只读字符串,你可以使用NSAttributedString。这里有一些方法来初始化它:
// Initialize with a string onlylet attrString1 = NSAttributedString(string: "Hello.")// Initialize with a string and inline attribute(s)let attrString2 = NSAttributedString(string: "Hello.",attributes: ["MyCustomAttribute": "A value"])// Initialize with a string and separately declared attribute(s)let myAttributes1 = [ NSForegroundcolorAttributename: UIcolor.green ]let attrString3 = NSAttributedString(string: "Hello.",attributes: myAttributes1)
如果以后需要更改属性或字符串内容,则应使用NSMutableAttributedString。声明非常相似:
// Create a blank attributed stringlet mutableAttrString1 = NSMutableAttributedString()// Initialize with a string onlylet mutableAttrString2 = NSMutableAttributedString(string: "Hello.")// Initialize with a string and inline attribute(s)let mutableAttrString3 = NSMutableAttributedString(string: "Hello.",attributes: ["MyCustomAttribute": "A value"])// Initialize with a string and separately declared attribute(s)let myAttributes2 = [ NSForegroundcolorAttributename: UIcolor.green ]let mutableAttrString4 = NSMutableAttributedString(string: "Hello.",attributes: myAttributes2)
更改属性字符串
例如,让我们在此帖的顶部创建属性字符串。
首先创建一个带有新字体属性的NSMutableAttributedString。
let myAttribute = [ NSFontAttributename: UIFont(name: "Chalkduster",size: 18.0)! ]let myString = NSMutableAttributedString(string: "Swift",attributes: myAttribute )
如果你正在努力,将属性字符串设置为UITextVIEw(或UILabel),如下所示:
textVIEw.attributedText = myString
您不使用textVIEw.text。
这里是结果:
然后附加没有设置任何属性的另一个属性字符串。 (请注意,即使我使用let声明myString上面,我仍然可以修改它,因为它是一个NSMutableAttributedString。这似乎相当unSwiftlike我和我不会感到惊讶,如果这种变化在未来。发生。)
let attrString = NSAttributedString(string: " Attributed Strings")myString.append(attrString)
接下来,我们只选择“Strings”字,它从索引17开始,长度为7.注意这是一个NSRange而不是一个Swift范围。 (有关范围的更多信息,请参阅this answer.)addAttribute方法允许我们将属性键名称放在第一个位置,属性值放在第二个位置,将范围放在第三个位置。
var myRange = NSRange(location: 17,length: 7) // range starting at location 17 with a lenth of 7: "Strings"myString.addAttribute(NSForegroundcolorAttributename,value: UIcolor.red,range: myRange)
最后,让我们添加一个背景颜色。对于多样性,让我们使用addAttributes方法(注意s)。我可以用这个方法一次添加多个属性,但我只是再添加一个。
myRange = NSRange(location: 3,length: 17)let anotherAttribute = [ NSBackgroundcolorAttributename: UIcolor.yellow ]myString.addAttributes(anotherAttribute,range: myRange)
请注意,属性在某些地方重叠。添加属性不会覆盖已经存在的属性。
有关
> How to change the text of an NSMutableAttributedString
but keep the attributes
进一步阅读
> How to retrieve the attributes from a tap location
> Attributed String Programming Guide(非常信息,但不幸的是只有在Objective-C)
以上是内存溢出为你收集整理的字体 – 如何使用Swift属性字符串?全部内容,希望文章能够帮你解决字体 – 如何使用Swift属性字符串?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)