Với Swift 4, NSAttributedStringKey
có một thuộc tính tĩnh được gọi foregroundColor
. foregroundColor
có tuyên bố sau:
static let foregroundColor: NSAttributedStringKey
Giá trị của thuộc tính này là một UIColor
đối tượng. Sử dụng thuộc tính này để chỉ định màu của văn bản trong khi kết xuất. Nếu bạn không chỉ định thuộc tính này, văn bản được hiển thị màu đen.
Mã Playground sau đây cho biết cách đặt màu văn bản của một NSAttributedString
thể hiện với foregroundColor
:
import UIKit
let string = "Some text"
let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
let attributedString = NSAttributedString(string: string, attributes: attributes)
Mã dưới đây cho thấy một UIViewController
triển khai có thể dựa vào NSAttributedString
để cập nhật văn bản và màu văn bản của một UILabel
từ 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
}
}
Tuy nhiên, lưu ý rằng bạn không thực sự cần sử dụng NSAttributedString
cho một ví dụ như vậy và chỉ có thể dựa vào UILabel
các thuộc tính text
và textColor
. Do đó, bạn có thể thay thế updateDisplay()
triển khai của mình bằng mã sau:
func updateDisplay() {
label.text = currentStatus.display.text
label.textColor = currentStatus.display.color
slider.value = Float(currentStatus.rawValue)
}