NSAttributedString — এটি কী, টেক্সট ফরম্যাটিং এবং iOS এ অ্যাট্রিবিউট

লেখক: IT Sectr প্রকাশিত: 2026-07-23 পড়ার সময়: 9 মিনিট

NSAttributedString হল iOS SDK-তে Foundation ফ্রেমওয়ার্কের একটি ক্লাস যা পৃথক অক্ষর বা টেক্সটের রেঞ্জে প্রয়োগ করা ফরম্যাটিং অ্যাট্রিবিউটের একটি সেট সহ একটি স্ট্রিং উপস্থাপন করে। সাধারণ NSString-এর বিপরীতে, NSAttributedString শুধু ইউনিকোড অক্ষরই নয়, স্ট্রিংয়ের প্রতিটি সেগমেন্টের জন্য অ্যাট্রিবিউটের (ফন্ট, রং, কার্নিং, সারিবদ্ধকরণ) একটি অভিধানও সংরক্ষণ করে। Apple ডেভেলপার ডকুমেন্টেশন (2026) অনুসারে, NSAttributedString হল iOS-এর সমস্ত UI কম্পোনেন্টে ফরম্যাটেড টেক্সট প্রদর্শনের ভিত্তি।

মূল পয়েন্ট

  • NSAttributedString — অ্যাট্রিবিউট সহ একটি অপরিবর্তনীয় স্ট্রিং যেখানে প্রতিটি অক্ষর বা রেঞ্জ একটি NSAttributedStringKey অভিধানের সাথে মিলে যায়
  • NSMutableAttributedString — রানটাইমে অ্যাট্রিবিউট পরিবর্তনের জন্য addAttribute, setAttributes, replaceCharacters পদ্ধতি সহ একটি পরিবর্তনীয় সংস্করণ
  • প্রধান অ্যাট্রিবিউট: .font, .foregroundColor, .paragraphStyle, .kern, .underlineStyle, .strikethroughStyle, .link, .backgroundColor
  • NSMutableParagraphStyle — সারিবদ্ধকরণ, লাইন স্পেসিং, ইন্ডেন্টেশন এবং টেক্সট দিক নির্ধারণের জন্য একটি সহায়ক অবজেক্ট
  • UILabel, UITextView, UITextField অ্যাট্রিবিউটেড স্ট্রিং প্রদর্শনের জন্য attributedText সমর্থন করে

NSAttributedString কী?

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 ধ্রুবক ব্যবহার করেন এবং এটি সংশ্লিষ্ট ধরণের একটি অবজেক্ট অ্যাসাইন করেন।

অ্যাট্রিবিউট কীমানের ধরণউদ্দেশ্য
.fontUIFontফন্ট এবং টেক্সট আকার
.foregroundColorUIColorটেক্সটের রং
.backgroundColorUIColorটেক্সটের পিছনে পটভূমির রং
.paragraphStyleNSParagraphStyleসারিবদ্ধকরণ, লাইন স্পেসিং, ইন্ডেন্টেশন
.kernNSNumber (Float)অক্ষরের মধ্যে ব্যবধান (কার্নিং)
.underlineStyleNSUnderlineStyle (Int)আন্ডারলাইন শৈলী (একক, দ্বৈত, মোটা, প্যাটার্ন)
.strikethroughStyleNSUnderlineStyle (Int)স্ট্রাইকথ্রু শৈলী
.linkNSURLইন্টারেক্টিভ হাইপারলিংকের জন্য URL
.shadowNSShadowঅফসেট, blurRadius এবং রং সহ টেক্সট ছায়া
.baselineOffsetNSNumber (Float)বেসলাইন থেকে টেক্সট অফসেট

NSParagraphStyle — প্যারাগ্রাফ ফরম্যাটিং

NSMutableParagraphStyle একটি অবজেক্ট যা প্যারাগ্রাফের ভিজুয়াল বৈশিষ্ট্য পরিচালনা করে: সারিবদ্ধকরণ (.alignment: .left, .center, .right, .justified), লাইন স্পেসিং (.lineSpacing), প্যারাগ্রাফ স্পেসিং (.paragraphSpacing), প্রথম লাইন ইন্ডেন্ট (.firstLineHeadIndent), বাম এবং ডান ইন্ডেন্টেশন (.headIndent, .tailIndent) এবং টেক্সট দিক (.baseWritingDirection)। ParagraphStyle এমন একটি রেঞ্জে প্রয়োগ করা হয় যাতে নিউলাইন অক্ষর অন্তর্ভুক্ত থাকে যদি পুরো প্যারাগ্রাফের জন্য একই ফরম্যাটিং প্রয়োজন হয়।

কোডে NSAttributedString কীভাবে তৈরি করবেন

NSAttributedString তৈরি একটি ইনিশিয়ালাইজারের মাধ্যমে করা হয় যা একটি স্ট্রিং এবং অ্যাট্রিবিউটের অভিধান নেয়। অ্যাট্রিবিউটগুলি পুরো স্ট্রিংয়ে প্রয়োগ করা হয়। মিশ্র ফরম্যাটিংয়ের (স্ট্রিংয়ের বিভিন্ন অংশে ভিন্ন অ্যাট্রিবিউট) জন্য, নির্দিষ্ট রেঞ্জে অ্যাট্রিবিউট পরবর্তী যোগ সহ NSMutableAttributedString ব্যবহার করা হয়। Objective-C একটি NSAttributedStringKey: UIFont অভিধান ব্যবহার করে, যেখানে Swift একটি টাইপ-নিরাপদ [NSAttributedString.Key: Any] অভিধান ব্যবহার করে।

swift
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 দিয়ে তৈরি করা

একটি উদাহরণ NSMutableParagraphStyle-এর মাধ্যমে প্যারাগ্রাফ ফরম্যাটিং প্রদর্শন করে। কেন্দ্র সারিবদ্ধকরণ, 8 পয়েন্টের লাইন স্পেসিং, 12 পয়েন্টের প্যারাগ্রাফ স্পেসিং সেট করা হয়। ParagraphStyle .paragraphStyle কী-র অধীনে অ্যাট্রিবিউট অভিধানে যোগ করা হয়। NSAttributedString পাস করা paragraphStyle-এর কপি তৈরি করে, তাই স্ট্রিং তৈরি করার পরে আপনি ইতিমধ্যে তৈরি স্ট্রিংকে প্রভাবিত না করে এটি পরিবর্তন করতে পারেন।

swift
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 এবং অ্যাট্রিবিউট পরিবর্তন

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 ব্যবহার করুন।

swift
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)

UILabel-এ অ্যাট্রিবিউটেড স্ট্রিং প্রদর্শনের উদাহরণ

NSAttributedString প্রদর্শনের সবচেয়ে সাধারণ উপায় হল এটি UILabel-এর attributedText প্রপার্টিতে অ্যাসাইন করা। text প্রপার্টির বিপরীতে, attributedText রেন্ডারিংয়ের জন্য অ্যাট্রিবিউট ব্যবহার করে, মিশ্র ফরম্যাটিং সমর্থন করে। গুরুত্বপূর্ণ: যদি attributedText সেট করা থাকে, UILabel font, textColor, এবং textAlignment প্রপার্টি উপেক্ষা করে — সমস্ত ভিজুয়াল বৈশিষ্ট্য NSAttributedString অ্যাট্রিবিউট থেকে আসে।

swift
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-এ প্রদর্শন

UITextView NSAttributedString-এ ইন্টারেক্টিভ লিংক সমর্থন করে। NSURL-সহ .link অ্যাট্রিবিউট টেক্সটকে ক্লিকযোগ্য করে তোলে। ট্যাপ হ্যান্ডেল করতে, textView(_:shouldInteractWith:in:interaction:) পদ্ধতি সহ UITextViewDelegate ব্যবহার করুন। UITextView টেক্সট নির্বাচন এবং মানক অপারেশন (কপি, অনুসন্ধান) এর জন্য UIMenuController ব্যবহার করাও সমর্থন করে।

NSAttributedString কে HTML এবং RTF-এ রূপান্তর

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 একটি একক ইন্টারফেসের মাধ্যমে উভয় ফরম্যাট হ্যান্ডেল করতে পারে।

swift
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-এর মধ্যে পার্থক্য কী?

NSString কোনো ফরম্যাটিং তথ্য ছাড়াই শুধুমাত্র ইউনিকোড অক্ষরের একটি ক্রম সংরক্ষণ করে। NSAttributedString অক্ষর সংরক্ষণ করে এবং প্রতিটি উপরেঞ্জের জন্য অ্যাট্রিবিউটের (ফন্ট, রং, শৈলী) একটি অভিধান ধারণ করে। প্রদর্শনের সময়, UIKit রেন্ডারিংয়ের জন্য এই অ্যাট্রিবিউট ব্যবহার করে, ফরম্যাটেড টেক্সট তৈরি করে।

কেন UILabel NSAttributedString অ্যাট্রিবিউট প্রদর্শন করে না?

সবচেয়ে সাধারণ কারণ attributedText-এর পরিবর্তে text প্রপার্টি ব্যবহার করা। text-এর মাধ্যমে অ্যাসাইন করলে, সমস্ত অ্যাট্রিবিউট উপেক্ষা করা হয়। দ্বিতীয় কারণ: attributedText সেট করার পরে, আপনি UILabel-এর font, textColor, বা textAlignment পরিবর্তন করেন — এই পরিবর্তনগুলি attributedText রিসেট করে। ফরম্যাটেড টেক্সটের জন্য শুধুমাত্র attributedText ব্যবহার করুন।

একটি স্ট্রিংয়ে বিভিন্ন ফন্ট কীভাবে প্রয়োগ করবেন?

একটি NSMutableAttributedString তৈরি করুন এবং ভিন্ন ফন্ট সহ প্রতিটি সেগমেন্টের জন্য addAttribute(.font, value: boldFont, range: boldRange) কল করুন। প্রতিটি কল শুধুমাত্র নির্দিষ্ট রেঞ্জে অ্যাট্রিবিউট প্রয়োগ করে। অবশিষ্ট অক্ষরগুলি মানক ফন্ট বা পূর্বে সেট করা অন্য ফন্ট ধরে রাখে। এইভাবে বিভিন্ন ফন্টের সাথে অ্যাট্রিবিউট রান তৈরি করা হয়।

NSAttributedString কি মাল্টিলাইন টেক্সটের সাথে কাজ করে?

হ্যাঁ, NSAttributedString মাল্টিলাইন টেক্সট সঠিকভাবে হ্যান্ডেল করে, নিউলাইন অক্ষর ( ) সহ। UITextView এবং UILabel (numberOfLines = 0 সহ) স্বয়ংক্রিয়ভাবে টেক্সটকে নতুন লাইনে মোড়ানো করে। NSMutableParagraphStyle প্রতিটি প্যারাগ্রাফের জন্য স্বাধীনভাবে লাইন স্পেসিং, ইন্ডেন্টেশন এবং সারিবদ্ধকরণ পরিচালনা করে।

একটি স্ট্রিংয়ে বিভিন্ন রং সহ রঙিন টেক্সট কীভাবে তৈরি করবেন?

প্রতিটি রং রেঞ্জের জন্য .foregroundColor অ্যাট্রিবিউট সহ NSMutableAttributedString ব্যবহার করুন। লাল টেক্সটের জন্য: addAttribute(.foregroundColor, value: UIColor.red, range: firstRange)। নীলের জন্য: addAttribute(.foregroundColor, value: UIColor.blue, range: secondRange)। রং শুধুমাত্র নির্দিষ্ট অক্ষর রেঞ্জে প্রয়োগ করা হবে।

সারাংশ

  • NSAttributedString — ফরম্যাটিং অ্যাট্রিবিউট (ফন্ট, রং, শৈলী) সহ একটি স্ট্রিং যা প্রতিটি অক্ষর রেঞ্জের জন্য একটি অভিধানে সংরক্ষিত থাকে
  • NSMutableAttributedString — ডায়নামিক ফরম্যাটিংয়ের জন্য addAttribute, setAttributes এবং removeAttribute পদ্ধতি সহ একটি পরিবর্তনীয় সংস্করণ
  • প্রধান অ্যাট্রিবিউট: .font, .foregroundColor, .paragraphStyle, .kern, .underlineStyle, .strikethroughStyle, .link, .shadow, .baselineOffset
  • NSMutableParagraphStyle প্যারাগ্রাফের জন্য সারিবদ্ধকরণ, লাইন স্পেসিং, ইন্ডেন্টেশন এবং টেক্সট দিক পরিচালনা করে
  • UILabel, UITextView, UITextField attributedText প্রপার্টির মাধ্যমে ফরম্যাটেড টেক্সট প্রদর্শন সমর্থন করে
  • HTML/RTF রূপান্তর — NSAttributedString documentType-এর মাধ্যমে ফরম্যাটেড টেক্সট ইম্পোর্ট এবং এক্সপোর্ট সমর্থন করে

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন