Bu yanıt Swift 4.2 için güncellendi.
Hızlı referans
İlişkilendirilmiş bir dizeyi yapmak ve ayarlamak için genel form şöyledir. Aşağıda diğer yaygın seçenekleri bulabilirsiniz.
// 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 ]
Bu yazının geri kalanı, ilgilenenler için daha fazla ayrıntı veriyor.
Öznitellikler
Dize öznitelikleri yalnızca biçimindeki bir sözlüktür [NSAttributedString.Key: Any]
; burada NSAttributedString.Key
özniteliğin anahtar adı ve Any
bazı Türlerin değeridir. Değer yazı tipi, renk, tamsayı veya başka bir şey olabilir. Swift'te önceden tanımlanmış birçok standart özellik vardır. Örneğin:
- anahtar adı:,
NSAttributedString.Key.font
değer: aUIFont
- anahtar adı:,
NSAttributedString.Key.foregroundColor
değer: aUIColor
- anahtar adı:,
NSAttributedString.Key.link
değer: an NSURL
veyaNSString
Daha birçokları var. Daha fazla bilgi için bu bağlantıya bakın . Kendi özel özelliklerinizi bile oluşturabilirsiniz:
anahtar adı:, NSAttributedString.Key.myName
değer: bazı Tür.
bir uzantı yaparsanız :
extension NSAttributedString.Key {
static let myName = NSAttributedString.Key(rawValue: "myCustomAttributeKey")
}
Swift'te özellikler oluşturma
Nitelikleri tıpkı diğer sözlükleri bildirmek gibi bildirebilirsiniz.
// 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" ]
Bunun rawValue
alt çizgi stil değeri için gerekli olduğuna dikkat edin.
Öznitelikler yalnızca Sözlük olduğundan, boş bir Sözlük yapıp daha sonra buna anahtar / değer çiftleri ekleyerek bunları oluşturabilirsiniz. Değer birden çok tür içerecekse, tür olarak kullanmanız gerekir Any
. İşte multipleAttributes
bu şekilde yeniden oluşturulan yukarıdaki örnek:
var multipleAttributes = [NSAttributedString.Key : Any]()
multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedString.Key.underlineStyle] = NSUnderlineStyle.double.rawValue
İlişkilendirilmiş Dizeler
Artık öznitelikleri anladığınıza göre, ilişkilendirilmiş dizeler oluşturabilirsiniz.
Başlatma
İlişkilendirilmiş dizeler oluşturmanın birkaç yolu vardır. Sadece salt okunur bir dizeye ihtiyacınız varsa kullanabilirsiniz NSAttributedString
. İşte başlatmanın bazı yolları:
// 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)
Daha sonra öznitelikleri veya dize içeriğini değiştirmeniz gerekirse kullanmanız gerekir NSMutableAttributedString
. Beyanlar çok benzer:
// 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)
İlişkilendirilmiş Bir Dizeyi Değiştirme
Örnek olarak, bu yayının üstünde ilişkilendirilmiş dizeyi oluşturalım.
Önce NSMutableAttributedString
yeni bir font özniteliği ile bir oluşturun .
let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myString = NSMutableAttributedString(string: "Swift", attributes: myAttribute )
Birlikte çalışıyorsanız, ilişkilendirilen dizeyi aşağıdaki gibi bir UITextView
(veya UILabel
) olarak ayarlayın:
textView.attributedText = myString
Sen yok kullanın textView.text
.
İşte sonuç:
Ardından, ayarlanmış özniteliği olmayan başka bir ilişkilendirilmiş dize ekleyin. ( Yukarıda let
beyan etmiş olmama myString
rağmen, yine de değiştirebilirim çünkü bu bir NSMutableAttributedString
.
let attrString = NSAttributedString(string: " Attributed Strings")
myString.append(attrString)
Ardından, dizinden başlayan 17
ve uzunluğu olan "Dizeler" kelimesini seçeceğiz 7
. Bunun NSRange
bir Swift değil, bir Swift olduğuna dikkat edin Range
. ( Aralıklarla ilgili daha fazla bilgi için bu cevaba bakın .) addAttribute
Yöntem, özellik anahtarı adını birinci noktaya, özellik değerini ikinci noktaya ve üçüncü noktaya aralığı koymamızı sağlar.
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)
Son olarak, bir arka plan rengi ekleyelim. Çeşitlilik için, addAttributes
yöntemi kullanalım (not s
). Bu yöntemle aynı anda birden fazla özellik ekleyebilirim, ancak yalnızca bir tane ekleyeceğim.
myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)
Özelliklerin bazı yerlerde çakıştığına dikkat edin. Bir öznitelik eklemek, zaten var olan bir özniteliğin üzerine yazmaz.
İlişkili
Daha fazla okuma
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue | NSUnderlineStyle.PatternDot.rawValue