Dengan Swift 4, NSAttributedStringKey
memiliki properti statis yang disebut foregroundColor
. foregroundColor
memiliki deklarasi berikut:
static let foregroundColor: NSAttributedStringKey
Nilai dari atribut ini adalah sebuah UIColor
objek. Gunakan atribut ini untuk menentukan warna teks selama rendering. Jika Anda tidak menentukan atribut ini, teks diterjemahkan dalam warna hitam.
Kode Playground berikut menunjukkan cara mengatur warna teks NSAttributedString
instance dengan foregroundColor
:
import UIKit
let string = "Some text"
let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
let attributedString = NSAttributedString(string: string, attributes: attributes)
Kode di bawah ini menunjukkan kemungkinan UIViewController
implementasi yang bergantung pada NSAttributedString
untuk memperbarui teks dan warna teks UILabel
dari UISlider
:
import UIKit
enum Status: Int {
case veryBad = 0, bad, okay, good, veryGood
var display: (text: String, color: UIColor) {
switch self {
case .veryBad: return ("Very bad", .red)
case .bad: return ("Bad", .orange)
case .okay: return ("Okay", .yellow)
case .good: return ("Good", .green)
case .veryGood: return ("Very good", .blue)
}
}
static let minimumValue = Status.veryBad.rawValue
static let maximumValue = Status.veryGood.rawValue
}
final class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var slider: UISlider!
var currentStatus: Status = Status.veryBad {
didSet {
// currentStatus is our model. Observe its changes to update our display
updateDisplay()
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Prepare slider
slider.minimumValue = Float(Status.minimumValue)
slider.maximumValue = Float(Status.maximumValue)
// Set display
updateDisplay()
}
func updateDisplay() {
let attributes = [NSAttributedStringKey.foregroundColor : currentStatus.display.color]
let attributedString = NSAttributedString(string: currentStatus.display.text, attributes: attributes)
label.attributedText = attributedString
slider.value = Float(currentStatus.rawValue)
}
@IBAction func updateCurrentStatus(_ sender: UISlider) {
let value = Int(sender.value.rounded())
guard let status = Status(rawValue: value) else { fatalError("Could not get Status object from value") }
currentStatus = status
}
}
Namun perlu dicatat bahwa Anda tidak benar-benar perlu menggunakan NSAttributedString
misalnya seperti itu dan hanya bisa mengandalkan UILabel
's text
dan textColor
sifat. Oleh karena itu, Anda dapat mengganti updateDisplay()
implementasi Anda dengan kode berikut:
func updateDisplay() {
label.text = currentStatus.display.text
label.textColor = currentStatus.display.color
slider.value = Float(currentStatus.rawValue)
}