यह उत्तर स्विफ्ट 4.2 के लिए अद्यतन किया गया है।
त्वरित संदर्भ
एक जिम्मेदार स्ट्रिंग बनाने और स्थापित करने का सामान्य रूप इस तरह है। आप नीचे अन्य सामान्य विकल्प पा सकते हैं।
// 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 ]
इस पोस्ट के बाकी उन लोगों के लिए और अधिक विवरण देता है जो रुचि रखते हैं।
गुण
स्ट्रिंग विशेषताएँ केवल एक शब्दकोष हैं [NSAttributedString.Key: Any]
, जहां NSAttributedString.Key
विशेषता का प्रमुख नाम है और Any
कुछ प्रकार का मूल्य है। मान एक फ़ॉन्ट, एक रंग, एक पूर्णांक, या कुछ और हो सकता है। स्विफ्ट में कई मानक विशेषताएँ हैं जो पहले से ही पूर्वनिर्धारित हैं। उदाहरण के लिए:
- मुख्य नाम:,
NSAttributedString.Key.font
मूल्य: एUIFont
- मुख्य नाम:,
NSAttributedString.Key.foregroundColor
मूल्य: एUIColor
- मुख्य नाम:,
NSAttributedString.Key.link
मान: a NSURL
याNSString
कई अन्य हैं। अधिक के लिए इस लिंक को देखें । आप अपनी स्वयं की कस्टम विशेषताएँ भी बना सकते हैं जैसे:
मुख्य नाम:, NSAttributedString.Key.myName
मान: कुछ प्रकार।
यदि आप एक एक्सटेंशन बनाते हैं :
extension NSAttributedString.Key {
static let myName = NSAttributedString.Key(rawValue: "myCustomAttributeKey")
}
स्विफ्ट में विशेषताएँ बनाना
आप किसी अन्य शब्दकोश को घोषित करने की तरह ही विशेषताओं की घोषणा कर सकते हैं।
// 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" ]
ध्यान दें rawValue
कि अंडरलाइन शैली मूल्य के लिए आवश्यक था।
क्योंकि विशेषताएँ सिर्फ डिक्शनरी हैं, आप उन्हें एक खाली शब्दकोश बनाकर और फिर उसमें कुंजी-मूल्य जोड़े जोड़कर भी बना सकते हैं। यदि मान में कई प्रकार होंगे, तो आपको Any
प्रकार के रूप में उपयोग करना होगा । यहाँ multipleAttributes
ऊपर से उदाहरण दिया गया है, इस तरह से बनाया गया है:
var multipleAttributes = [NSAttributedString.Key : Any]()
multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedString.Key.underlineStyle] = NSUnderlineStyle.double.rawValue
स्ट्रगल किया
अब जब आप विशेषताओं को समझते हैं, तो आप जिम्मेदार स्ट्रिंग्स बना सकते हैं।
प्रारंभ
जिम्मेदार स्ट्रिंग्स बनाने के कुछ तरीके हैं। यदि आपको केवल पढ़ने के लिए स्ट्रिंग की आवश्यकता है तो आप इसका उपयोग कर सकते हैं NSAttributedString
। इसे शुरू करने के कुछ तरीके इस प्रकार हैं:
// 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)
यदि आपको बाद में विशेषताओं या स्ट्रिंग सामग्री को बदलने की आवश्यकता होगी, तो आपको उपयोग करना चाहिए NSMutableAttributedString
। घोषणाएँ बहुत समान हैं:
// 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)
एक परिवर्तित स्ट्रिंग को बदलना
एक उदाहरण के रूप में, आइए इस पोस्ट के शीर्ष पर आरोपित स्ट्रिंग बनाएं।
पहले NSMutableAttributedString
एक नए फ़ॉन्ट विशेषता के साथ बनाएँ ।
let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myString = NSMutableAttributedString(string: "Swift", attributes: myAttribute )
यदि आप साथ काम कर रहे हैं , तो इस तरह से UITextView
(या UILabel
) को जिम्मेदार स्ट्रिंग सेट करें:
textView.attributedText = myString
आप उपयोग नहीं करते textView.text
।
यहाँ परिणाम है:
फिर एक और जिम्मेदार स्ट्रिंग संलग्न करें जिसमें कोई विशेषता सेट नहीं है। (ध्यान दें कि भले ही मैं ऊपर let
घोषित करता था myString
, फिर भी मैं इसे संशोधित कर सकता हूं क्योंकि यह एक है NSMutableAttributedString
। यह मेरे लिए अनुचित है, लेकिन अगर भविष्य में यह बदलता है तो मुझे आश्चर्य नहीं होगा। ऐसा होने पर मुझे एक टिप्पणी छोड़ दें।)
let attrString = NSAttributedString(string: " Attributed Strings")
myString.append(attrString)
अगला हम केवल "स्ट्रिंग्स" शब्द का चयन करेंगे, जो सूचकांक में शुरू होता है 17
और जिसकी लंबाई होती है 7
। ध्यान दें कि यह एक है NSRange
और स्विफ्ट नहीं है Range
। ( रेंज के बारे में अधिक के लिए यह उत्तर देखें ।) addAttribute
विधि हमें पहले स्थान पर विशेषता कुंजी नाम, दूसरे स्थान में विशेषता मान और तीसरे स्थान में सीमा देती है।
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)
अंत में, आइए पृष्ठभूमि का रंग जोड़ें। विविधता के लिए, आइए addAttributes
विधि का उपयोग करें (नोट करें s
)। मैं इस पद्धति से एक बार में कई विशेषताओं को जोड़ सकता हूं, लेकिन मैं सिर्फ एक को फिर से जोड़ दूंगा।
myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)
ध्यान दें कि विशेषताएँ कुछ स्थानों पर अतिव्यापी हैं। एक विशेषता जोड़ना उस विशेषता को अधिलेखित नहीं करता है जो पहले से है।
सम्बंधित
आगे की पढाई
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue | NSUnderlineStyle.PatternDot.rawValue