如何使用多个变量一起自定义具有不同字体大小和颜色的UILabel

时间:2015-02-17 18:58:31

标签: ios swift uilabel uicolor uifont

我试图将 3个变量放在同一个UILabel中,以强调第二个词。

使用一个变量它可以正常工作。 (选项1)

    //Option 1 That work with one variable
    labelBoldAnswer.attributedText = secondWordBoldRed

结果1 :粗体和红色

enter image description here

import UIKit

类ViewController:UIViewController,UITextFieldDelegate {

@IBOutlet weak var textFieldOriginal : UITextField!
@IBOutlet weak var labelBoldAnswer   : UILabel!

@IBAction func ButtonBold(sender: AnyObject) {

    var firstWord   = "First Word"
    var thirdWord   = "Third Word"

    var attrs      = [NSFontAttributeName: UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor()]
    var secondWordBoldRed = NSMutableAttributedString (string:textFieldOriginal.text, attributes: attrs)

    //Option 1 That work with one variable
    labelBoldAnswer.attributedText = secondWordBoldRed

    //Option 2 That work partialy
    //labelBoldAnswer.text = ("\(firstWord), \(secondWordBoldRed), \(thirdWord)")

}

第二次尝试

使用三个变量,它会显示带代码的所有文本,而不是在第一个和第三个单词的中心显示更大的文本和红色。 (选项2)

//Option 2 That work partialy
    labelBoldAnswer.text = ("\(firstWord), \(secondWordBoldRed), \(thirdWord)")

结果2不完美

enter image description here

import UIKit

类ViewController:UIViewController,UITextFieldDelegate {

@IBOutlet weak var textFieldOriginal : UITextField!
@IBOutlet weak var labelBoldAnswer   : UILabel!

@IBAction func ButtonBold(sender: AnyObject) {

    var firstWord   = "First Word"
    var thirdWord   = "Third Word"

    var attrs      = [NSFontAttributeName: UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor()]
    var secondWordBoldRed = NSMutableAttributedString (string:textFieldOriginal.text, attributes: attrs)

    //Option 1 That work with one variable
    //labelBoldAnswer.attributedText = secondWordBoldRed

    //Option 2 That work partialy
    labelBoldAnswer.text = ("\(firstWord), \(secondWordBoldRed), \(thirdWord)")

}

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

您可以构建属性字符串,并在不同的部分添加属性:

    let firstWord   = "First Word"
    let secondWord = "Insert Text"
    let attrs      = [NSFontAttributeName: UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor()]
    let thirdWord   = "Third Word"
    let attributedText = NSMutableAttributedString(string:firstWord)
    attributedText.appendAttributedString(NSAttributedString(string: secondWord, attributes: attrs))
    attributedText.appendAttributedString(NSAttributedString(string: thirdWord))
    textField.attributedText = attributedText

或者创建东西,然后在范围中添加属性。由于NSAttributedString使用NSRange,而Swift String使用Range<String.index>,这有点复杂。

    let firstWord   = "First Word"
    let secondWord = "Insert Text"
    let thirdWord   = "Third Word"
    let comboWord = firstWord + secondWord + thirdWord
    let attributedText = NSMutableAttributedString(string:comboWord)
    let attrs      = [NSFontAttributeName: UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor()]
    let range = NSString(string: comboWord).rangeOfString(secondWord)
    attributedText.addAttributes(attrs, range: range)
    textField.attributedText = attributedText

答案 1 :(得分:4)

您需要执行以下操作:

let attrsA = [NSFontAttributeName: UIFont.boldSystemFontOfSize(10)]
var a = NSMutableAttributedString(string:"hello", attributes:attrsA)
let attrsB =  [NSFontAttributeName: UIFont.boldSystemFontOfSize(20), NSForegroundColorAttributeName: UIColor.redColor()]
let b = NSAttributedString(string:"world", attributes:attrsB)
a.appendAttributedString(b)

将创建一个混合了多个属性的字符串a

答案 2 :(得分:0)

您需要做的是构造一个包含所有变量值的属性字符串,并在适当的范围内进行适当的样式设置。有多种解决方案,但我建议你看一下NSMutableAttributedString:

  1. 完全按照secondWordBoldRed
  2. 创建“部件”
  3. 使用 - [NSMutableAttributedString appendAttributedString:]
  4. 组合它们
  5. 将labelBoldAnswer.attributedText设置为NSMutableAttributedString