ios swift:是否可以更改字符串中某个单词的字体样式?

时间:2015-03-20 11:32:49

标签: ios swift

我从DB内容中提取为字符串。使用方法,我从该字符串中提取最长的单词。

现在我想将整个字符串打印到文本标签,但想在字符串中突出显示不同颜色和文本样式的最长字。

我该怎么做? 我是否需要将字符串切成碎片 - 设置格式 - 然后将它们全部放在一起再放入标签之前?

或者还有其他(更好)的方式吗?

3 个答案:

答案 0 :(得分:23)

如果你已经知道最长的单词,你必须得到字符串中该单词的范围。我更喜欢NSString方法rangeOfString:

然后使用默认属性从字符串创建NSMutableAttributedString。最后,将突出显示属性应用于您之前想出的范围。

let longString = "Lorem ipsum dolor. VeryLongWord ipsum foobar"
let longestWord = "VeryLongWord"

let longestWordRange = (longString as NSString).rangeOfString(longestWord)

let attributedString = NSMutableAttributedString(string: longString, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(20)])

attributedString.setAttributes([NSFontAttributeName : UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName : UIColor.redColor()], range: longestWordRange)


label.attributedText = attributedString

在我的操场上看起来像这样:

enter image description here

答案 1 :(得分:2)

您想查看Attributed Strings和NSRange。您可以将这两者结合使用,为字符串中的范围创建不同的样式。这是一个片段:

myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!])

//Add more attributes here:
myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Chalkduster", size: 24.0), range: NSRange(location: 7,length: 5))
myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "AmericanTypewriter-Bold", size: 18.0)!, range: NSRange(location:2,length:4))
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))

myMutableString.addAttribute(NSFontAttributeName, value: UIFont(name: "Georgia", size: 36.0)!, range: NSRange(location: 0, length: 1))
myMutableString.addAttribute(NSStrokeColorAttributeName, value: UIColor.blueColor(), range:  NSRange(location: 0, length: 1))
myMutableString.addAttribute(NSStrokeWidthAttributeName, value: 2, range: NSRange(location: 0, length: 1))

myMutableString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location: 0, length: myString.length))
myLabel.backgroundColor = UIColor.grayColor()

//Apply to the label
myLabel.attributedText = myMutableString

答案 2 :(得分:0)

NSMutableAttributedString。

您创建NSMutableAttributedString并使用addAttributes:range应用效果。

然后将其分配到attributedText的{​​{1}}属性。