Attributed Text: यह क्या है, विशेषताओं के प्रकार और शैलीकरण

लेखक: IT Sectr प्रकाशित: 2026-07-23 पढ़ने का समय: 8 मिनट

Attributed Text iOS SDK का एक तंत्र है, जो NSAttributedString और NSMutableAttributedString क्लासों द्वारा दर्शाया गया है, जो एक ही टेक्स्ट स्ट्रिंग के विभिन्न भागों पर अनेक शैलियों को लागू करने की अनुमति देता है। सामान्य NSString के विपरीत, Attributed String ना केवल अक्षरों को संग्रहीत करता है बल्कि प्रत्येक रेंज के लिए एक विशेषता शब्दकोश भी संग्रहीत करता है: फ़ॉन्ट, रंग, पंक्ति अंतराल, छाया और संरेखण। Apple Developer Documentation के अनुसार, Attributed String UILabel, UITextView और UITextField में स्वरूपित टेक्स्ट प्रदर्शित करने का आधार है। WebKit या तीसरे पक्ष की लाइब्रेरियों के बिना टेक्स्ट शैलीकरण का यह मानक तरीका है।

मुख्य बातें

  • NSAttributedString — iOS में विशेषता शब्दकोशों के माध्यम से टेक्स्ट शैलीकरण के लिए एक अपरिवर्तनीय क्लास
  • विशेषताएँ में फ़ॉन्ट, रंग, पंक्ति अंतराल, छाया, रेखांकन और संरेखण शामिल हैं
  • NSMutableAttributedString — गतिशील रूप से शैलियों को लागू करने के लिए एक परिवर्तनीय संस्करण
  • addAttributes एक रेंज पर एक विशेषता शब्दकोश लागू करता है, addAttribute एक विशेषता लागू करता है
  • NSAttributedString का उपयोग UILabel, UITextView, UITextField और Core Text में होता है

iOS में Attributed Text क्या है।

NSAttributedString Foundation फ़्रेमवर्क का एक क्लास है जो अक्षर रेंजों से बँधे नामित विशेषताओं के एक समूह के साथ एक स्ट्रिंग का प्रतिनिधित्व करता है। प्रत्येक विशेषता एक कुंजी-मान युग्म है: कुंजी एक स्थिरांक (NSFontAttributeName, NSForegroundColorAttributeName) द्वारा परिभाषित होती है, और मान संगत ऑब्जेक्ट (UIFont, UIColor) होता है। विशेषताएँ NSRange के माध्यम से अक्षरों की एक रेंज पर लागू होती हैं।

यह क्लास सभी Apple प्लेटफ़ॉर्मों पर उपलब्ध है: iOS (2.0+), macOS, tvOS, watchOS। NSAttributedString अपरिवर्तनीय है — एक बार बनाने के बाद, इसकी विशेषताएँ स्थिर होती हैं। गतिशील परिवर्तनों के लिए NSMutableAttributedString का उपयोग किया जाता है, जो NSAttributedString से विरासत पाता है और setAttributes, addAttributes, addAttribute, removeAttribute विधियाँ जोड़ता है।

NSString से अंतर

NSString बिना शैलीकरण जानकारी के अक्षरों की एक सरल स्ट्रिंग है। text के माध्यम से UILabel को भेजा गया कोई भी टेक्स्ट एक ही फ़ॉन्ट, रंग और आकार में प्रदर्शित होता है। NSAttributedString, attributedText के माध्यम से भेजा जाता है, प्रत्येक अक्षर को विशेषताओं का अपना सेट रखने की अनुमति देता है। UILabel, UITextView और UITextField स्वचालित रूप से NSAttributedString को पहचानते हैं और इसकी विशेषताओं के अनुसार टेक्स्ट को रेंडर करते हैं।

भंडारण स्वरूप

आंतरिक रूप से, NSAttributedString टेक्स्ट के साथ एक NSString और विशेषता रेंजों की एक सारणी संग्रहीत करता है। प्रत्येक रेंज एक NSRange संरचना और एक विशेषता शब्दकोश द्वारा दर्शाया जाता है। रेंडरिंग के दौरान, सिस्टम रेंजों के माध्यम से गुजरता है और प्रत्येक अनुभाग पर संगत विशेषताओं को लागू करता है। दक्षता विशेषता स्विचिंग की संख्या पर निर्भर करती है — छोटे अनुभागों पर बार-बार बदलाव से रेंडरिंग का समय बढ़ जाता है।

NSAttributedString की विशेषताएँ

NSAttributedString की विशेषताएँ UIKit (iOS) और AppKit (macOS) में परिभाषित स्थिरांक हैं, प्रत्येक टेक्स्ट दृश शैलीकरण के एक विशिष्ट पहलू के अनुरूप है। सभी विशेषताएँ NSAttributedString.Key स्ट्रिंग हैं, और उनके मान विशिष्ट क्लासों के ऑब्जेक्ट होते हैं। विशेषताएँ अक्षर-स्तर (अक्षरों को प्रभावित करने वाली) और पैराग्रफ-स्तर (पैराग्रफों को प्रभावित करने वाली) में विभाजित होती हैं।

अक्षर-स्तर की विशेषताओं में फ़ॉन्ट (NSFontAttributeName), टेक्स्ट रंग (NSForegroundColorAttributeName), पृष्ठभूमि रंग (NSBackgroundColorAttributeName), रेखांकन (NSUnderlineStyleAttributeName), स्ट्राइकथ्रू (NSStrikethroughStyleAttributeName), छाया (NSShadowAttributeName) शामिल हैं। पैराग्रफ-स्तर की विशेषताएँ NSParagraphStyleAttributeName के माध्यम से निर्धारित की जाती हैं, जो संरेखण, इंडेंटेशन, पंक्ति अंतराल और टैबुलेशन को नियंत्रित करता है।

लिंक और अंतरक्रिया विशेषताएँ

NSLinkAttributeName टेक्स्ट में एक क्लिक करने योग्य लिंक बनाता है: मान URL या स्ट्रिंग है। UITextView अंतरक्रिया सक्षम होने पर ऐसे लिंकों को स्वचालित रूप से संभालता है। NSAttachmentAttributeName एक NSTextAttachment — टेक्स्ट के अंदर एक छवि जो एक इनलाइन तत्व के रूप में प्रदर्शित होती है — को एम्बेड करने की अनुमति देता है। इसका उपयोग एक स्ट्रिंग के अंदर आइकन, इमोजी या कस्टम व्यू के साथ टेक्स्ट बनाने के लिए किया जाता है।

मूल शैलीकरण विशेषताएँ

प्रत्येक NSAttributedString विशेषता का एक सत्त्वनिष्ठ रूप से टाइप किया गया मान होता है। iOS विकास में सबसे अधिक उपयोग की जाने वाली विशेषताओं पर नज़र डालते हैं। फ़ॉन्ट एक UIFont ऑब्जेक्ट के माध्यम से, रंग UIColor के माध्यम से, पंक्ति अंतराल NSMutableParagraphStyle के माध्यम से निर्धारित किया जाता है, जो एक ही ऑब्जेक्ट में संरेखण, इंडेंटेशन और अंतराल को कॉन्फ़िगर करने की अनुमति देता है।

विशेषता कुंजीमान प्रकारउद्देश्य
NSFontAttributeNameUIFontटेक्स्ट फ़ॉन्ट
NSForegroundColorAttributeNameUIColorटेक्स्ट रंग
NSBackgroundColorAttributeNameUIColorटेक्स्ट के पीछे पृष्ठभूमि रंग
NSUnderlineStyleAttributeNameNSNumber (Int)रेखांकन शैली
NSParagraphStyleAttributeNameNSParagraphStyleपैराग्रफ सेटिंग्स
NSKernAttributeNameNSNumber (Float)अक्षर अंतराल (कर्निंग)

NSParagraphStyle

NSParagraphStyle पैराग्रफ विशेषताओं के लिए एक कंटेनर है: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight और अन्य। इन मापदंडों को संशोधित करने के लिए, एक NSMutableParagraphStyle बनाया जाता है, वांछित गुण निर्धारित किए जाते हैं, और ऑब्जेक्ट को NSParagraphStyleAttributeName विशेषता के मान के रूप में भेजा जाता है। NSAttributedString में पंक्ति अंतराल को नियंत्रित करने का यह एकमात्र तरीका है।

छाया और प्रभाव

NSShadow टेक्स्ट में छाया जोड़ने की अनुमति देता है: पैरामीटर shadowOffset, shadowBlurRadius, shadowColor छाया के ऑफ़सेट, धुंधलेपन और रंग को निर्धारित करते हैं। रेखांकन और स्ट्राइकथ्रू विशेषताएँ शैली संयोजनों को स्वीकार करती हैं: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot। लाइनों की मोटाई और रंग पर सटीक नियंत्रण के लिए NSUnderlineColorAttributeName और NSStrikethroughColorAttributeName का उपयोग किया जाता है।

कोड में NSAttributedString का उपयोग कैसे करें

Swift में NSAttributedString बनाना टेक्स्ट और एक विशेषता शब्दकोश के साथ एक इनिशियलाइज़र के माध्यम से, या चरण-दर-चरण शैली आवेदन के साथ NSMutableAttributedString के माध्यम से किया जाता है। मूल दृष्टिकोण पूरे टेक्स्ट के लिए एक विशेषता शब्दकोश परिभाषित करना है, फिर विशिष्ट रेंजों के लिए विशेषताएँ जोड़ना या संशोधित करना है।

पूरे टेक्स्ट के लिए विशेषताओं के साथ निर्माण

एक सरल उदाहरण — पूरी स्ट्रिंग के लिए फ़ॉन्ट, रंग और संरेखण निर्धारित करना। विशेषता शब्दकोश NSAttributedString इनिशियलाइज़र को भेजा जाता है। शब्दकोश की कुंजीएँ NSAttributedString.Key स्थिरांक हैं, मान संगत UIKit ऑब्जेक्ट हैं। यह मूल मामला है जब पूरा टेक्स्ट एकसमान रूप से स्वरूपित होता है।

swift
let attributes: [NSAttributedString.Key: Any] = [
    .font: UIFont.systemFont(ofSize: 16),
    .foregroundColor: UIColor.darkGray,
    .paragraphStyle: let style = NSMutableParagraphStyle()
    style.alignment = .center
    style.lineSpacing = 4
    return style
]
let attributedString = NSAttributedString(
    string: "Hello world",
    attributes: attributes
)
label.attributedText = attributedString

टेक्स्ट systemFont 16, गहरे सल्फ़र रंग, केंद्र संरेखण और 4pt पंक्ति अंतराल के साथ प्रदर्शित होगा। यह दृष्टिकोण स्थिर शीर्षकों और बटनों के लिए सुविधाजनक है।

एक रेंज पर लागू करना

NSMutableAttributedString टेक्स्ट के विभिन्न भागों पर अलग-अलग शैलियों को लागू करने की अनुमति देता है। विधि addAttribute एक रेंज में एक विशेषता जोड़ती है, addAttributes विशेषताओं का एक शब्दकोश जोड़ती है। विधि setAttributes एक रेंज की सभी मौcजूदा विशेषताओं को नए से बदल देती है। यह हायलाइट के साथ टेक्स्ट बनाने का मुख्य उपकरण है।

swift
let text = "Price: 1999 rubles"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.foregroundColor,
    value: UIColor.green, range: NSRange(location: 6, length: 4))
attributed.addAttribute(.font,
    value: UIFont.boldSystemFont(ofSize: 20), range: NSRange(location: 6, length: 4))
label.attributedText = attributed

शब्द “1999” हरा और बोल्ड होगा, बाकी का टेक्स्ट मानक होगा। NSRange की गणना मैनुअली की जाती है — अक्षरों में लंबाई की सही गणना करना महत्वपूर्ण है, खासकर इमोजी और यौगिक Unicode अक्षरों के साथ काम करते समय।

NSMutableAttributedString के साथ गतिशील शैलियाँ

NSMutableAttributedString टेक्स्ट और विशेषताओं को गतिशील रूप से बदलने के लिए विधियाँ प्रदान करता है: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes। यह अलग-अलग स्रोतों से टेक्स्ट बनाने, शैलियों को संयोजित करने और इंटरफ़ेस घटनाओं का जवाब देने की अनुमति देता है।

अपरिवर्तनीय NSAttributedString के विपरीत, परिवर्तनीय संस्करण एक नया ऑब्जेक्ट बनाए बिना सामग्री बदलने का समर्थन करता है। यह टेक्स्ट एडिटर्स, चैट और फ़ॉर्म के लिए महत्वपूर्ण है जहां उपयोगकर्ता टेक्स्ट को संपादित कर सकता है और शैलियों को संरक्षित रहना चाहिए।

चैट में शैलियों का संयोजन

मैसेंजरों में, प्रत्येक संदेश में उपयोगकर्ता नाम (बोल्ड फ़ॉन्ट), संदेश पाठ (सामान्य), समय (सल्फ़र रंग) होता है। NSMutableAttributedString उपयुक्त विशेषताओं के साथ वांछित क्रम में भागों को जोड़कर एक ही बार में ऐसी स्ट्रिंग बनाने की अनुमति देता है।

swift
let result = NSMutableAttributedString()
let name = NSAttributedString(string: "Anna: ",
    attributes: [.font: UIFont.boldSystemFont(ofSize: 15)])
let message = NSAttributedString(string: "Hello, how are you?",
    attributes: [.font: UIFont.systemFont(ofSize: 15)])
let time = NSAttributedString(string: " 12:30",
    attributes: [.foregroundColor: UIColor.gray])
result.append(name)
result.append(message)
result.append(time)
label.attributedText = result

परिणाम तीन शैलीकृत अनुभागों के साथ एक ही स्ट्रिंग है। Append स्वचालित रूप से NSRange की गणना करता है, स्थितियों की मैनुअली गणना की आवश्यकता नहीं है। यह दृष्टिकोण किसी भी संख्या के खंडों के लिए मापनीय है।

विशेषताओं की गणना

enumerateAttributes(in:options:using:) विधि निर्दिष्ट अंतराल में सभी विशेषता रेंजों के माध्यम से गुजरती है। यह स्वरूपण विश्लेषण के लिए उपयोगी है: सभी लिंक ढूँढना, विशिष्ट विशेषताओं का रंग बदलना या टेक्स्ट को HTML में निर्यात करना। क्लोजर में वर्तमान अनुभाग का विशेषता शब्दकोश और NSRange भेजा जाता है।

UIKit UI घटकों में Attributed Text

UIKit में टेक्स्ट प्रदर्शित करने के लिए सभी प्रमुख UI घटक attributedText गुण के माध्यम से NSAttributedString का समर्थन करते हैं। UILabel स्थिर शैलीकृत टेक्स्ट प्रदर्शित करता है, UITextView संपादन और लिंक का समर्थन करता है, UITextField अलग-अलग प्लेसहोल्डर और दर्ज किए गए टेक्स्ट के लिए विशेषताएँ स्वीकार करता है।

attributedText के साथ UILabel

UILabel शैलीकृत टेक्स्ट प्रदर्शित करने के लिए सबसे हल्का घटक है। यह सभी अक्षर-स्तर की विशेषताओं का समर्थन करता है लेकिन क्लिक करने योग्य लिंक को स्वचालित रूप से संभालता नहीं है (इसके लिए UITextView की आवश्यकता है)। UILabel शीर्षकों, लेबल और छोटे स्वरूपित टेक्स्ट के लिए आदर्श है।

लिंक के साथ UITextView

UITextView NSLinkAttributeName को संभालता है और लिंक को अंतरक्रियात्मक तत्वों के रूप में प्रदर्शित करता है। इस कार्यक्षमता को सक्षम करने के लिए, isSelectable = true और isEditable = false सेट करें। जब किसी लिंक पर टप किया जाता है, तो डिलेगेट को textView(_:shouldInteractWith:in:interaction:) काल प्राप्त होता है। UITextView टेक्स्ट के अंदर छवियों के लिए NSTextAttachment का भी समर्थन करता है।

swift
let text = "Details on developer.apple.com"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.link,
    value: URL(string: "https://developer.apple.com")!,
    range: NSRange(location: 0, length: text.count))
textView.attributedText = attributed
textView.isSelectable = true
textView.isEditable = false

isSelectable और isEditable सेट करने के बाद, टेक्स्ट क्षेत्र एक स्थिर टेक्स्ट ब्लॉक की तरह व्यवहार करता है, लेकिन लिंक सक्रिय रहते हैं। UITextViewDelegate टप करने पर व्यवहार को नियंत्रित करता है।

Core Text के साथ एकीकरण

Core Text टेक्स्ट रेंडरिंग के लिए Apple का एक निकन्न-स्तरीय फ़्रेमवर्क है जो सीधे NSAttributedString के साथ काम करता है। UIKit के विपरीत, Core Text NSAttributedString को सीधे प्रदर्शन ऑब्जेक्ट के रूप में उपयोग नहीं करता — बल्कि इसे CTFramesetter, फिर CTFrame में बदलता है और एक Core Graphics संदर्भ में रेंडर करता है। यह पंक्ति लेआउट और ग्लाइफ्स पर पूर्ण नियंत्रण देता है।

Core Text का उपयोग कस्टम टेक्स्ट लेआउट के लिए उचित है: कॉलम, इमेज रैपिंग, टेक्स्ट रोटेशन, गैर-मानक लाइन ब्रेक्स। Core Text के NSMutableParagraphStyle में वे विशेषताएँ शामिल हैं जो UIKit में नहीं हैं: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode अतिरिक्त मोड के साथ।

UIKit और Core Text के बीच रूपांतरण

NSAttributedString UIKit और Core Text के बीच निर्विघ्न रूप से स्थानांतरित होता है, क्योंकि दोनों फ़्रेमवर्क एक ही प्रकार के साथ काम करते हैं। UIKit की विशेषताएँ (NSFontAttributeName, NSForegroundColorAttributeName) Core Text द्वारा स्वचालित रूप से पहचानी जाती हैं, और इसके विपरीत — Core Text की विशेषताएँ (kCTFontAttributeName) UIKit द्वारा पढ़ी जाती हैं। यह एक ही NSAttributedString ऑब्जेक्ट पर सरल कार्यों के लिए UIKit और कस्टम रेंडरिंग के लिए Core Text का उपयोग करने की अनुमति देता है।

अक्सर पूछे जाने वाले प्रश्न

NSAttributedString NSString से कैसे अलग है।

NSString बिना शैलीकरण जानकारी के केवल टेक्स्ट संग्रहीत करता है। NSAttributedString प्रत्येक अक्षर रेंज के लिए एक विशेषता शब्दकोश के साथ टेक्स्ट को पूरक करता है। जब text गुण के माध्यम से UILabel को भेजा जाता है, तो NSString प्लेन टेक्स्ट के रूप में प्रदर्शित होता है। जब NSAttributedString को attributedText के माध्यम से भेजा जाता है, तो सभी विशेषताएँ लागू होती हैं: एक ही स्ट्रिंग में अलग-अलग फ़ॉन्ट, रंग और अंतराल।

एक रेंज में अनेक विशेषताएँ कैसे जोड़ें।

एक विशेषता शब्दकोश के साथ addAttributes(_:range:) विधि का उपयोग करें: addAttributes([.font: font, .foregroundColor: color], range: range)। एक विशेषता जोड़ने या बदलने के लिए addAttribute(_:value:range:) का उपयोग करें। setAttributes विधि रेंज में सभी मौcजूदा विशेषताओं को प्रदान की गई विशेषताओं से बदल देती है।

NSAttributedString में पंक्ति अंतराल कैसे बदलें।

एक NSMutableParagraphStyle बनाएं, lineSpacing गुण सेट करें, फिर इसे NSParagraphStyleAttributeName विशेषता के मान के रूप में भेजें। पूर्ण नियंत्रण के लिए, minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode और alignment भी उपलब्ध हैं। ParagraphStyle पंक्ति अंतराल को नियंत्रित करने का एकमात्र तरीका है।

क्या विशेषताएँ SwiftUI में काम करती हैं।

हाँ, SwiftUI iOS 15+ में Text(attributedString:) के माध्यम से NSAttributedString का समर्थन करता है। पुराने संस्करणों में, UILabel या UITextView के साथ UIViewRepresentable का उपयोग करें। SwiftUI Markdown-जैसी सिंटैक्स के साथ घोषणात्मक स्वरूपण के लिए अपना खुद का AttributedString प्रकार (SwiftUI, Foundation नहीं) भी प्रदान करता है।

NSAttributedString का आकार कैसे गणना करें।

boundingRect(with:options:context:) विधि का उपयोग करें, जो दी गई विशेषताओं के साथ स्ट्रिंग को प्रदर्शित करने के लिए आवश्यक CGRect लौटाता है। options पैरामीटर: [.usesLineFragmentOrigin, .usesFontLeading] पंक्ति अंतराल और फ़ॉन्ट मैट्रिक्स को ध्यान में रखता है। सीमित संख्या की पंक्तियों वाले UILabel के लिए, sizeThatFits का उपयोग करें।

सारांश

  • NSAttributedString — iOS में विशेषता शब्दकोशों के माध्यम से टेक्स्ट शैलीकरण के लिए एक Foundation क्लास
  • विशेषताएँ में फ़ॉन्ट (UIFont), रंग (UIColor), रेखांकन, छाया और पैराग्रफ सेटिंग्स शामिल हैं
  • NSMutableAttributedString — विशेषताओं को जोड़ने और हटाने के लिए एक गतिशील संस्करण
  • addAttributes(_:range:) एक अक्षर रेंज पर एक विशेषता शब्दकोश लागू करता है
  • NSParagraphStyle पंक्ति अंतराल, संरेखण और इंडेंटेशन को नियंत्रित करता है
  • UILabel, UITextView, UITextField शैलियों को प्रदर्शित करने के लिए attributedText का समर्थन करते हैं
  • Core Text निम्न-स्तरीय रेंडरिंग के लिए उसी NSAttributedString का उपयोग करता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें