Hat mit Swift 4 NSAttributedStringKey
eine statische Eigenschaft namens foregroundColor
. foregroundColor
hat die folgende Erklärung:
static let foregroundColor: NSAttributedStringKey
Der Wert dieses Attributs ist ein UIColor
Objekt. Verwenden Sie dieses Attribut, um die Farbe des Texts beim Rendern anzugeben. Wenn Sie dieses Attribut nicht angeben, wird der Text schwarz gerendert.
Der folgende Spielplatzcode zeigt, wie Sie die Textfarbe einer NSAttributedString
Instanz mit festlegen foregroundColor
:
import UIKit
let string = "Some text"
let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
let attributedString = NSAttributedString(string: string, attributes: attributes)
Der folgende Code zeigt eine mögliche UIViewController
Implementierung, die sich darauf stützt NSAttributedString
, um den Text und die Textfarbe von a UILabel
von a zu aktualisieren 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
}
}
Beachten Sie jedoch, dass Sie NSAttributedString
für ein solches Beispiel nicht wirklich verwenden müssen und sich einfach auf UILabel
's text
und textColor
Eigenschaften verlassen können. Daher können Sie Ihre updateDisplay()
Implementierung durch den folgenden Code ersetzen :
func updateDisplay() {
label.text = currentStatus.display.text
label.textColor = currentStatus.display.color
slider.value = Float(currentStatus.rawValue)
}