กับสวิฟท์ 4 มีคุณสมบัติคงที่เรียกว่าNSAttributedStringKey
มีการประกาศดังต่อไปนี้:foregroundColor
foregroundColor
static let foregroundColor: NSAttributedStringKey
ค่าของคุณลักษณะนี้เป็นUIColor
วัตถุ ใช้แอททริบิวนี้เพื่อระบุสีของข้อความระหว่างการเรนเดอร์ หากคุณไม่ได้ระบุแอททริบิวนี้ข้อความจะแสดงเป็นสีดำ
รหัสสนามเด็กเล่นต่อไปนี้แสดงวิธีตั้งค่าสีข้อความของNSAttributedString
อินสแตนซ์ด้วยforegroundColor
:
import UIKit
let string = "Some text"
let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
let attributedString = NSAttributedString(string: string, attributes: attributes)
รหัสด้านล่างแสดงการUIViewController
ใช้งานที่เป็นไปได้ที่ต้องอาศัยNSAttributedString
เพื่ออัปเดตข้อความและสีข้อความของ a UILabel
จาก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
}
}
แต่ทราบว่าคุณไม่ได้จริงๆต้องใช้NSAttributedString
ตัวอย่างเช่นและก็สามารถพึ่งพาUILabel
's text
และtextColor
คุณสมบัติ ดังนั้นคุณสามารถแทนที่updateDisplay()
การใช้งานของคุณด้วยรหัสต่อไปนี้:
func updateDisplay() {
label.text = currentStatus.display.text
label.textColor = currentStatus.display.color
slider.value = Float(currentStatus.rawValue)
}