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

Sha*_*Man 3 uilabel uicolor uifont ios swift

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

有了一个变量就可以了.(选项1)

    //Option 1 That work with one variable
    labelBoldAnswer.attributedText = secondWordBoldRed
Run Code Online (Sandbox Code Playgroud)

结果1是:大胆和红色

在此输入图像描述

import UIKit
Run Code Online (Sandbox Code Playgroud)

class 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)")
Run Code Online (Sandbox Code Playgroud)

}

第二个尝试

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

//Option 2 That work partialy
    labelBoldAnswer.text = ("\(firstWord), \(secondWordBoldRed), \(thirdWord)")
Run Code Online (Sandbox Code Playgroud)

结果2不完美:

在此输入图像描述

import UIKit
Run Code Online (Sandbox Code Playgroud)

class 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)")
Run Code Online (Sandbox Code Playgroud)

}

谢谢你的帮助!

qwe*_*_so 5

您需要执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

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


Jer*_*ope 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
Run Code Online (Sandbox Code Playgroud)

或者创建东西,然后在范围中添加属性.由于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
Run Code Online (Sandbox Code Playgroud)