NSAttributedString iOS SDK में Foundation फ्रेमवर्क का एक वर्ग है जो अलग-अलग वर्णों या टेक्स्ट की श्रेणियों पर लागू फ़ॉर्मेटिंग विशेषताओं के सेट के साथ एक स्ट्रिंग का प्रतिनिधित्व करता है। सामान्य NSString के विपरीत, NSAttributedString न केवल यूनिकोड वर्णों को संग्रहीत करता है बल्कि स्ट्रिंग के प्रत्येक खंड के लिए विशेषताओं (फ़ॉन्ट, रंग, कर्निंग, संरेखण) का एक शब्दकोश भी संग्रहीत करता है। Apple डेवलपर दस्तावेज़ीकरण (2026) के अनुसार, NSAttributedString सभी iOS UI घटकों में फ़ॉर्मेटेड टेक्स्ट प्रदर्शित करने का आधार है।
मुख्य बिंदु
NSAttributedString फ़ॉर्मेटेड टेक्स्ट के साथ काम करने के लिए एक मौलिक iOS/macOS वर्ग है। यह स्ट्रिंग में विशेषताएँ जोड़कर NSString का विस्तार करता है — कुंजी-मान युग्मों का एक शब्दकोश जहाँ कुंजी एक NSAttributedStringKey स्थिरांक (जैसे, .font, .foregroundColor) है और मान संबंधित ऑब्जेक्ट (UIFont, UIColor) है। स्ट्रिंग में प्रत्येक वर्ण की अपनी विशेषताओं का सेट हो सकता है, जो एक ही स्ट्रिंग के भीतर मिश्रित फ़ॉर्मेटिंग सक्षम करता है।
NSAttributedString की वास्तुकला विशेषता रन (attribute runs) की अवधारणा पर आधारित है। यदि आप वर्ण श्रेणी 0..5 के लिए .font विशेषता को UIFont.boldSystemFont(ofSize: 16) पर सेट करते हैं, तो उस श्रेणी के सभी वर्ण बोल्ड में दिखाई देंगे। अन्य वर्णों का एक अलग फ़ॉन्ट हो सकता है या कोई विशेषता नहीं हो सकती है। विशेषता वाली स्ट्रिंग प्रस्तुत करते समय, UIKit सिस्टम विभिन्न श्रेणियों की विशेषताओं को मर्ज करता है और टेक्स्ट को समान रूप से प्रस्तुत करता है।
NSAttributedString अपरिवर्तनीय है — निर्माण के बाद, इसकी विशेषताओं और सामग्री को बदला नहीं जा सकता। संशोधन के लिए, NSMutableAttributedString उपवर्ग मौजूद है, जो किसी भी श्रेणी में विशेषताओं को जोड़ने, हटाने और बदलने की विधियाँ प्रदान करता है। यह अंतर मल्टीथ्रेडिंग के लिए महत्वपूर्ण है: अपरिवर्तनीय NSAttributedString थ्रेड-सुरक्षित है, जबकि NSMutableAttributedString नहीं है।
NSAttributedString NSAttributedStringKey में परिभाषित लगभग 40 मानक विशेषताओं का समर्थन करता है। प्रत्येक विशेषता टेक्स्ट की उपस्थिति के एक विशिष्ट पहलू को प्रभावित करती है: फ़ॉन्ट, रंग, स्थिति, रेखांकन, छाया, कर्निंग, पैराग्राफ शैली और हाइपरलिंक। विशेषता सेट करने के लिए, आप एक NSAttributedStringKey स्थिरांक का उपयोग करते हैं और इसे संबंधित प्रकार का एक ऑब्जेक्ट असाइन करते हैं।
| विशेषता कुंजी | मान प्रकार | उद्देश्य |
|---|---|---|
| .font | UIFont | फ़ॉन्ट और टेक्स्ट आकार |
| .foregroundColor | UIColor | टेक्स्ट रंग |
| .backgroundColor | UIColor | टेक्स्ट के पीछे पृष्ठभूमि रंग |
| .paragraphStyle | NSParagraphStyle | संरेखण, पंक्ति अंतराल, इंडेंटेशन |
| .kern | NSNumber (Float) | वर्ण अंतराल (कर्निंग) |
| .underlineStyle | NSUnderlineStyle (Int) | रेखांकन शैली (एकल, दोहरा, मोटा, पैटर्न) |
| .strikethroughStyle | NSUnderlineStyle (Int) | स्ट्राइकथ्रू शैली |
| .link | NSURL | इंटरैक्टिव हाइपरलिंक के लिए URL |
| .shadow | NSShadow | ऑफ़सेट, blurRadius और रंग के साथ टेक्स्ट छाया |
| .baselineOffset | NSNumber (Float) | आधार रेखा से टेक्स्ट ऑफ़सेट |
NSMutableParagraphStyle एक ऑब्जेक्ट है जो पैराग्राफ की दृश्य विशेषताओं का प्रबंधन करता है: संरेखण (.alignment: .left, .center, .right, .justified), पंक्ति अंतराल (.lineSpacing), पैराग्राफ अंतराल (.paragraphSpacing), पहली पंक्ति इंडेंट (.firstLineHeadIndent), बाएँ और दाएँ इंडेंटेशन (.headIndent, .tailIndent) और टेक्स्ट दिशा (.baseWritingDirection)। ParagraphStyle एक श्रेणी पर लागू किया जाता है जिसमें न्यूलाइन वर्ण शामिल होते हैं यदि पूरे पैराग्राफ के लिए समान फ़ॉर्मेटिंग आवश्यक हो।
NSAttributedString बनाना एक इनिशियलाइज़र के माध्यम से किया जाता है जो एक स्ट्रिंग और विशेषताओं का शब्दकोश लेता है। विशेषताएँ पूरी स्ट्रिंग पर लागू होती हैं। मिश्रित फ़ॉर्मेटिंग (स्ट्रिंग के विभिन्न भागों में अलग-अलग विशेषताएँ) के लिए, NSMutableAttributedString का उपयोग विशिष्ट श्रेणियों में विशेषताओं के बाद के जोड़ के साथ किया जाता है। Objective-C एक NSAttributedStringKey: UIFont शब्दकोश का उपयोग करता है, जबकि Swift एक टाइप-सुरक्षित [NSAttributedString.Key: Any] शब्दकोश का उपयोग करता है।
let plainText = "Hello, Swift!"
// Create with uniform attributes for the entire string
let attributes: [NSAttributedString.Key: Any] = [
NSAttributedString.Key.font:
UIFont.systemFont(ofSize: 18),
NSAttributedString.Key.foregroundColor:
UIColor.darkText,
NSAttributedString.Key.kern: 1.5
]
let attributedString =
NSAttributedString(string: plainText,
attributes: attributes)
एक उदाहरण NSMutableParagraphStyle के माध्यम से पैराग्राफ फ़ॉर्मेटिंग प्रदर्शित करता है। केंद्र संरेखण, 8 पॉइंट की पंक्ति अंतराल, 12 पॉइंट का पैराग्राफ अंतराल सेट किया जाता है। ParagraphStyle को .paragraphStyle कुंजी के तहत विशेषता शब्दकोश में जोड़ा जाता है। NSAttributedString पारित paragraphStyle की प्रतिलिपि बनाता है, इसलिए स्ट्रिंग बनाने के बाद आप इसे पहले से बनाई गई स्ट्रिंग को प्रभावित किए बिना संशोधित कर सकते हैं।
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.center
paragraphStyle.lineSpacing = 8.0
paragraphStyle.paragraphSpacing = 12.0
paragraphStyle.firstLineHeadIndent = 20.0
let attributed = NSAttributedString(
string: "Centered paragraph with spacing",
attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
NSMutableAttributedString NSAttributedString का एक उपवर्ग है जो निर्माण के बाद सामग्री और विशेषताओं को संशोधित करने की अनुमति देता है। मुख्य विधियाँ: एक श्रेणी में एकल विशेषता जोड़ने के लिए addAttribute(_:value:range:); कई विशेषताएँ जोड़ने के लिए addAttributes(_:range:); एक श्रेणी में सभी विशेषताओं को बदलने के लिए setAttributes(_:range:); विशेषता हटाने के लिए removeAttribute(_:range:); टेक्स्ट बदलने के लिए replaceCharacters(in:with:)।
addAttribute और addAttributes पहले से सेट विशेषताओं को हटाए बिना मौजूदा विशेषताओं में जोड़ते हैं। यदि किसी श्रेणी में पहले से ही उसी कुंजी वाली कोई विशेषता है, तो उसका मान बदल दिया जाता है। setAttributes एक श्रेणी के लिए विशेषता शब्दकोश को पूरी तरह से बदल देता है — सभी पहले से सेट विशेषताएँ हटा दी जाती हैं। एक ही स्ट्रिंग को क्रमिक रूप से फ़ॉर्मेट करते समय इसे समझना महत्वपूर्ण है: addAttributes अधिक सुरक्षित है क्योंकि यह पहले से सेट फ़ॉन्ट और रंगों को रीसेट नहीं करता है।
श्रेणियाँ (NSRange) NSRange(location: 0, length: 5) संरचना का उपयोग करके निर्दिष्ट की जाती हैं। location प्रारंभिक सूचकांक (0-आधारित) है, length वर्णों की संख्या है। यदि श्रेणी स्ट्रिंग सीमाओं से अधिक है, तो NSMutableAttributedString एक NSRangeException फेंकता है। सुरक्षित श्रेणी संचालन के लिए, Foundation से NSRange विधियों जैसे NSIntersectionRange और NSUnionRange का उपयोग करें।
let attributed = NSMutableAttributedString(
string: "Bold and red text here")
// Apply bold font to first 9 characters
let boldRange = NSRange(location: 0, length: 9)
attributed.addAttribute(
NSAttributedString.Key.font,
value: UIFont.boldSystemFont(ofSize: 16),
range: boldRange)
// Apply red color to characters 13-16 ("text")
let redRange = NSRange(location: 13, length: 4)
attributed.addAttribute(
NSAttributedString.Key.foregroundColor,
value: UIColor.red,
range: redRange)
// Apply underline to the entire string
let fullRange = NSRange(location: 0,
length: attributed.length)
attributed.addAttribute(
NSAttributedString.Key.underlineStyle,
value: NSUnderlineStyle.single.rawValue,
range: fullRange)
NSAttributedString प्रदर्शित करने का सबसे सामान्य तरीका इसे UILabel की attributedText संपत्ति को असाइन करना है। text संपत्ति के विपरीत, attributedText रेंडरिंग के लिए विशेषताओं का उपयोग करता है, मिश्रित फ़ॉर्मेटिंग का समर्थन करता है। महत्वपूर्ण: यदि attributedText सेट है, तो UILabel font, textColor, और textAlignment गुणों को अनदेखा करता है — सभी दृश्य विशेषताएँ NSAttributedString विशेषताओं से आती हैं।
let label = UILabel()
label.numberOfLines = 0
let fullText = NSMutableAttributedString(
string: "Price: $24.99 per month")
// Format "Price:" label with bold font
let priceLabelRange = NSRange(
location: 0, length: 6)
fullText.addAttribute(
NSAttributedString.Key.font,
value: UIFont.boldSystemFont(ofSize: 16),
range: priceLabelRange)
// Format "$24.99" with green color
let amountRange = NSRange(
location: 7, length: 6)
fullText.addAttribute(
NSAttributedString.Key.foregroundColor,
value: UIColor.systemGreen(),
range: amountRange)
fullText.addAttribute(
NSAttributedString.Key.font,
value: UIFont.boldSystemFont(ofSize: 22),
range: amountRange)
// Apply gray color to "per month" text
let periodRange = NSRange(
location: 14, length: 9)
fullText.addAttribute(
NSAttributedString.Key.foregroundColor,
value: UIColor.secondaryLabel,
range: periodRange)
label.attributedText = fullText
UITextView NSAttributedString में इंटरैक्टिव लिंक का समर्थन करता है। NSURL के साथ .link विशेषता टेक्स्ट को क्लिक करने योग्य बनाती है। टैप को संभालने के लिए, textView(_:shouldInteractWith:in:interaction:) विधि के साथ UITextViewDelegate का उपयोग करें। UITextView टेक्स्ट चयन और मानक संचालन (कॉपी, खोज) के लिए UIMenuController का उपयोग करने का भी समर्थन करता है।
NSAttributedString NSAttributedString.DocumentType के माध्यम से HTML और RTF से रूपांतरण का समर्थन करता है। HTML लोड करने के लिए, documentAttributes पैरामीटर वाले इनिशियलाइज़र का उपयोग करें: NSAttributedString(data: htmlData, options: [.documentType: .html], documentAttributes: nil)। इसी तरह RTF के लिए: .rtf या .rtfd। यह तंत्र WebView के बिना HTML सामग्री प्रदर्शित करने के लिए उपयोगी है।
HTML में निर्यात करने के लिए, एक श्रेणी और दस्तावेज़ प्रकार के साथ data(from:documentAttributes:) विधि का उपयोग करें। HTML निर्यात: try attributedString.data(from: fullRange, documentAttributes: [.documentType: .html])। परिणामी डेटा को फ़ाइल में सहेजा जा सकता है, सर्वर पर भेजा जा सकता है, या WebView में प्रदर्शित किया जा सकता है। निर्यात के दौरान, फ़ॉन्ट, रंग, संरेखण, सूचियाँ — सभी फ़ॉर्मेटिंग विशेषताएँ — CSS शैलियों में परिवर्तित हो जाती हैं।
RTF समर्थन विशेष रूप से macOS अनुप्रयोगों के लिए प्रासंगिक है, जहाँ RTF समृद्ध टेक्स्ट का मानक प्रारूप है। iOS भी RTF पढ़ने और लिखने का समर्थन करता है लेकिन इसे प्राथमिक प्रारूप के रूप में उपयोग नहीं करता है। RTF और RTFD के बीच अंतर: RTFD में एक निर्देशिका में पैक किए गए एम्बेडेड संसाधन (चित्र) शामिल हैं। NSAttributedString एक ही इंटरफ़ेस के माध्यम से दोनों प्रारूपों को संभाल सकता है।
let htmlString = "<p><b>Bold<\/b> and <i>italic<\/i><\/p>"
guard let htmlData = htmlString.data(
using: String.Encoding.utf8) else { return }
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
NSAttributedString.DocumentReadingOptionKey.documentType:
NSAttributedString.DocumentType.html
]
let attributedFromHTML =
try? NSAttributedString(
data: htmlData,
options: options,
documentAttributes: nil)
अक्सर पूछे जाने वाले प्रश्न
NSString बिना किसी फ़ॉर्मेटिंग जानकारी के केवल यूनिकोड वर्णों का एक अनुक्रम संग्रहीत करता है। NSAttributedString वर्णों को संग्रहीत करता है और प्रत्येक उपश्रेणी के लिए विशेषताओं (फ़ॉन्ट, रंग, शैली) का एक शब्दकोश शामिल करता है। प्रदर्शित होने पर, UIKit रेंडरिंग के लिए इन विशेषताओं का उपयोग करता है, फ़ॉर्मेटेड टेक्स्ट बनाता है।
सबसे आम कारण attributedText के बजाय text गुण का उपयोग करना है। text के माध्यम से असाइन करने पर, सभी विशेषताएँ अनदेखा कर दी जाती हैं। दूसरा कारण: attributedText सेट करने के बाद, आप UILabel के font, textColor, या textAlignment को बदलते हैं — ये परिवर्तन attributedText को रीसेट करते हैं। फ़ॉर्मेटेड टेक्स्ट के लिए केवल attributedText का उपयोग करें।
एक NSMutableAttributedString बनाएँ और अलग-अलग फ़ॉन्ट वाले प्रत्येक खंड के लिए addAttribute(.font, value: boldFont, range: boldRange) कॉल करें। प्रत्येक कॉल विशेषता को केवल निर्दिष्ट श्रेणी पर लागू करता है। शेष वर्ण मानक फ़ॉन्ट या पहले से सेट किसी अन्य फ़ॉन्ट को बनाए रखते हैं। इस प्रकार विभिन्न फ़ॉन्ट के साथ विशेषता रन बनाए जाते हैं।
हाँ, NSAttributedString बहु-पंक्ति टेक्स्ट को सही ढंग से संभालता है, जिसमें न्यूलाइन वर्ण ( ) शामिल हैं। UITextView और UILabel (numberOfLines = 0 के साथ) स्वचालित रूप से टेक्स्ट को एक नई पंक्ति में लपेटते हैं। NSMutableParagraphStyle प्रत्येक पैराग्राफ के लिए स्वतंत्र रूप से पंक्ति अंतराल, इंडेंटेशन और संरेखण का प्रबंधन करता है।
प्रत्येक रंग श्रेणी के लिए .foregroundColor विशेषता के साथ NSMutableAttributedString का उपयोग करें। लाल टेक्स्ट के लिए: addAttribute(.foregroundColor, value: UIColor.red, range: firstRange)। नीले के लिए: addAttribute(.foregroundColor, value: UIColor.blue, range: secondRange)। रंग केवल निर्दिष्ट वर्ण श्रेणियों पर लागू होंगे।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें