Jawaban ini telah diperbarui untuk Swift 4.2.
Referensi cepat
Bentuk umum untuk membuat dan mengatur string yang dikaitkan adalah seperti ini. Anda dapat menemukan opsi umum lainnya di bawah ini.
// create attributed string
let myString = "Swift Attributed String"
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)
// set attributed text on a UILabel
myLabel.attributedText = myAttrString
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]
let myAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myAttribute = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue ]
let myShadow = NSShadow()
myShadow.shadowBlurRadius = 3
myShadow.shadowOffset = CGSize(width: 3, height: 3)
myShadow.shadowColor = UIColor.gray
let myAttribute = [ NSAttributedString.Key.shadow: myShadow ]
Sisa dari posting ini memberikan lebih banyak detail bagi mereka yang tertarik.
Atribut
Atribut string hanyalah kamus dalam bentuk [NSAttributedString.Key: Any]
, di mana NSAttributedString.Key
nama kunci atribut dan Any
merupakan nilai dari beberapa Tipe. Nilai bisa berupa font, warna, integer, atau yang lainnya. Ada banyak atribut standar di Swift yang telah ditentukan sebelumnya. Sebagai contoh:
- nama kunci:,
NSAttributedString.Key.font
nilai: aUIFont
- nama kunci:,
NSAttributedString.Key.foregroundColor
nilai: aUIColor
- nama kunci:,
NSAttributedString.Key.link
nilai: an NSURL
atauNSString
Ada banyak lainnya. Lihat tautan ini untuk lebih lanjut. Anda bahkan dapat membuat atribut khusus Anda sendiri seperti:
nama kunci:, NSAttributedString.Key.myName
nilai: beberapa Jenis.
jika Anda membuat ekstensi :
extension NSAttributedString.Key {
static let myName = NSAttributedString.Key(rawValue: "myCustomAttributeKey")
}
Membuat atribut di Swift
Anda dapat mendeklarasikan atribut seperti halnya mendeklarasikan kamus lainnya.
// single attributes declared one at a time
let singleAttribute1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let singleAttribute2 = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
let singleAttribute3 = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]
// multiple attributes declared at once
let multipleAttributes: [NSAttributedString.Key : Any] = [
NSAttributedString.Key.foregroundColor: UIColor.green,
NSAttributedString.Key.backgroundColor: UIColor.yellow,
NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]
// custom attribute
let customAttribute = [ NSAttributedString.Key.myName: "Some value" ]
Perhatikan rawValue
bahwa itu diperlukan untuk nilai gaya garis bawah.
Karena atribut hanyalah Kamus, Anda juga dapat membuatnya dengan membuat Kamus kosong dan kemudian menambahkan pasangan nilai kunci ke dalamnya. Jika nilainya akan berisi banyak jenis, maka Anda harus menggunakan Any
sebagai jenisnya. Berikut adalah multipleAttributes
contoh dari atas, dibuat ulang dengan cara ini:
var multipleAttributes = [NSAttributedString.Key : Any]()
multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedString.Key.underlineStyle] = NSUnderlineStyle.double.rawValue
String yang dikaitkan
Sekarang setelah Anda memahami atribut, Anda dapat membuat string yang dikaitkan.
Inisialisasi
Ada beberapa cara untuk membuat string yang dikaitkan. Jika Anda hanya membutuhkan string read-only yang dapat Anda gunakan NSAttributedString
. Berikut ini beberapa cara untuk menginisialisasi:
// Initialize with a string only
let attrString1 = NSAttributedString(string: "Hello.")
// Initialize with a string and inline attribute(s)
let attrString2 = NSAttributedString(string: "Hello.", attributes: [NSAttributedString.Key.myName: "A value"])
// Initialize with a string and separately declared attribute(s)
let myAttributes1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let attrString3 = NSAttributedString(string: "Hello.", attributes: myAttributes1)
Jika nanti Anda perlu mengubah atribut atau konten string, Anda harus menggunakannya NSMutableAttributedString
. Deklarasi sangat mirip:
// Create a blank attributed string
let mutableAttrString1 = NSMutableAttributedString()
// Initialize with a string only
let mutableAttrString2 = NSMutableAttributedString(string: "Hello.")
// Initialize with a string and inline attribute(s)
let mutableAttrString3 = NSMutableAttributedString(string: "Hello.", attributes: [NSAttributedString.Key.myName: "A value"])
// Initialize with a string and separately declared attribute(s)
let myAttributes2 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let mutableAttrString4 = NSMutableAttributedString(string: "Hello.", attributes: myAttributes2)
Mengubah String yang Dikaitkan
Sebagai contoh, mari kita buat string yang dikaitkan di bagian atas posting ini.
Pertama buat NSMutableAttributedString
dengan atribut font baru.
let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myString = NSMutableAttributedString(string: "Swift", attributes: myAttribute )
Jika Anda bekerja bersama, setel string yang dikaitkan dengan UITextView
(atau UILabel
) seperti ini:
textView.attributedText = myString
Anda tidak menggunakan textView.text
.
Inilah hasilnya:
Kemudian tambahkan string terkait lainnya yang tidak memiliki set atribut apa pun. (Perhatikan bahwa meskipun saya pernah let
menyatakan di myString
atas, saya masih dapat memodifikasinya karena itu adalah NSMutableAttributedString
. Ini sepertinya tidak disukai bagi saya dan saya tidak akan terkejut jika ini berubah di masa depan. Beri saya komentar ketika itu terjadi.)
let attrString = NSAttributedString(string: " Attributed Strings")
myString.append(attrString)
Selanjutnya kita hanya akan memilih kata "Strings", yang dimulai pada indeks 17
dan memiliki panjang 7
. Perhatikan bahwa ini adalah NSRange
dan bukan Swift Range
. (Lihat jawaban ini untuk informasi lebih lanjut tentang Rentang.) addAttribute
Metode ini memungkinkan kita meletakkan nama kunci atribut di tempat pertama, nilai atribut di tempat kedua, dan rentang di tempat ketiga.
var myRange = NSRange(location: 17, length: 7) // range starting at location 17 with a lenth of 7: "Strings"
myString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red, range: myRange)
Akhirnya, mari kita tambahkan warna latar belakang. Untuk variasi, mari gunakan addAttributes
metode ini (perhatikan s
). Saya bisa menambahkan beberapa atribut sekaligus dengan metode ini, tetapi saya hanya akan menambahkan satu lagi.
myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)
Perhatikan bahwa atributnya tumpang tindih di beberapa tempat. Menambahkan atribut tidak menimpa atribut yang sudah ada di sana.
Terkait
Bacaan lebih lanjut
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue | NSUnderlineStyle.PatternDot.rawValue