我试图将 3个变量放在同一个UILabel中,以强调第二个词。
使用一个变量它可以正常工作。 (选项1)
//Option 1 That work with one variable
labelBoldAnswer.attributedText = secondWordBoldRed
结果1 :粗体和红色
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不完美:
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)")
}
感谢您的帮助!
答案 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: