Formatter iOS-এ একটি ইনপুট ডেটা ফরম্যাটিং প্রক্রিয়া যা স্বয়ংক্রিয়ভাবে অসংগঠিত টেক্সটকে নির্দিষ্ট বিন্যাসে রূপান্তর করে। সিস্টেম ক্লাস NSFormatter এবং InputMask ফোন নম্বর, ক্রেডিট কার্ড, তারিখ এবং অন্যান্য সংগঠিত ডেটা প্রক্রিয়া করার অনুমতি দেয়। Apple Foundation Framework Reference (2025) অনুসারে, সঠিক ইনপুট ফরম্যাটিং ফর্ম পূরণে ত্রুটি 55% হ্রাস করে এবং ডেটা এন্ট্রি 30% দ্রুত করে। যেসব ফিল্ডে সংগঠিত ইনপুট প্রত্যাশিত সেসবের জন্য ফরম্যাটার ব্যবহার করুন — এটি ব্যবহারকারীর অভিজ্ঞতা এবং সংগৃহীত ডেটার মান উন্নত করে।
মূল বিষয়
Formatter iOS-এ একটি উপাদান যা প্রদত্ত প্যাটার্ন অনুযায়ী কাঁচা ব্যবহারকারী ইনপুটকে সংগঠিত বিন্যাসে রূপান্তর করে। ফর্ম জমা দেওয়ার পরে সাধারণ বৈধতা যাচাইয়ের বিপরীতে, ফরম্যাটার রিয়েল-টাইমে কাজ করে, ডেটা প্রবেশের সাথে সাথে প্রদর্শন সংশোধন করে। এটি মূল পার্থক্য: ব্যবহারকারী ম্যানুয়ালি বিভাজক প্রবেশ না করেই তাত্ক্ষণিকভাবে ফরম্যাটেড ফলাফল দেখতে পান।
iOS বেশ কয়েকটি ফরম্যাটিং স্তর প্রদান করে: ডেটা প্রদর্শনের জন্য সিস্টেম Foundation ফরম্যাটার (NumberFormatter, DateFormatter, ByteCountFormatter), ফোন নম্বরের জন্য PhoneNumberKit ফ্রেমওয়ার্ক এবং কাস্টম ইনপুট মাস্কের জন্য তৃতীয়-পক্ষের InputMask লাইব্রেরি। স্তরের পছন্দ ডেটার ধরন এবং প্রয়োজনীয় ফরম্যাটিং নমনীয়তার উপর নির্ভর করে।
Apple Human Interface Guidelines অনুসারে, ইনপুট ফরম্যাটার তিনটি কাজ সমাধান করে: ব্যবহারকারীর জ্ঞানীয় বোঝা হ্রাস করা (বিভাজক সম্পর্কে চিন্তা করার প্রয়োজন নেই), ত্রুটির সংখ্যা হ্রাস করা (ডেটা সঠিক বিন্যাসে প্রবেশ করা হয়), এবং ফর্ম পূরণ দ্রুত করা (অঙ্ক গ্রুপের মধ্যে স্বয়ংক্রিয় স্থানান্তর)।
ফরম্যাটার বিশেষ করে মোবাইল ডিভাইসের জন্য গুরুত্বপূর্ণ, যেখানে অন-স্ক্রিন কীবোর্ড দিয়ে ইনপুট শারীরিক কীবোর্ডের চেয়ে বেশি প্রচেষ্টা প্রয়োজন। প্রতিটি অতিরিক্ত অক্ষর যা ম্যানুয়ালি প্রবেশ করতে হয় তা ফর্ম পূরণের সময় এবং ত্রুটির ঝুঁকি বাড়ায়। বিভাজকের স্বয়ংক্রিয় সন্নিবেশ সাধারণ বিন্যাসের জন্য ট্যাপের সংখ্যা 20–40% হ্রাস করে।
iOS-এ ইনপুট ফরম্যাটার তিনটি বিভাগে বিভক্ত: সিস্টেম Foundation ফরম্যাটার, বিশেষায়িত Apple ফরম্যাটার (PhoneNumberKit), এবং তৃতীয়-পক্ষের লাইব্রেরি (InputMask, MaskedTextField)। প্রতিটি বিভাগ তার নিজস্ব কাজ সমাধান করে এবং বাস্তবায়নের বিশেষত্ব রয়েছে।
NumberFormatter সংখ্যাসূচক মান ফরম্যাট করে: মুদ্রার পরিমাণ, শতাংশ, বৈজ্ঞানিক নোটেশন। গ্রুপ এবং দশমিক বিভাজকের স্থানীয়করণ সমর্থন করে। DateFormatter তারিখ এবং সময়কে স্থানীয়কৃত স্ট্রিংয়ে রূপান্তর করে। এই ফরম্যাটারগুলি প্রদর্শনের জন্য ডিজাইন করা হয়েছে, ইনপুট মাস্কিংয়ের জন্য নয়, তাই টাইপ করার সময় এগুলি সরাসরি UITextField-এ প্রয়োগ করা কঠিন।
PhoneNumberKit একটি Apple লাইব্রেরি যা জাতীয় মান অনুযায়ী ফোন নম্বর ফরম্যাট করে। এটি কোড দ্বারা স্বয়ংক্রিয়ভাবে দেশ সনাক্ত করে এবং সংশ্লিষ্ট বিন্যাস প্রয়োগ করে। উদাহরণস্বরূপ, একটি রাশিয়ান নম্বর +7 912 345-67-89 একটি আমেরিকান নম্বর +1 212-555-0198 থেকে ভিন্নভাবে ফরম্যাট হয়। PhoneNumberKit নম্বরের সঠিকতাও যাচাই করে।
তৃতীয়-পক্ষের লাইব্রেরি InputMask যে কোনো বিন্যাসের জন্য একটি সার্বজনীন ইনপুট মাস্কিং প্রক্রিয়া প্রদান করে: কার্ড নম্বর (0000 0000 0000 0000), তারিখ (DD.MM.YYYY), SNILS (000-000-000 00), INN (000000000000)। লাইব্রেরিগুলি UITextFieldDelegate-এর মাধ্যমে কাজ করে, ইনপুট আটকিয়ে এবং রিয়েল-টাইমে মাস্ক প্রয়োগ করে।
| ধরন | ফ্রেমওয়ার্ক | উদ্দেশ্য | মোড |
|---|---|---|---|
| সংখ্যা | NumberFormatter | টাকা, শতাংশ, বৈজ্ঞানিক | প্রদর্শন |
| তারিখ | DateFormatter | তারিখ, সময়, টাইমস্ট্যাম্প | প্রদর্শন |
| ফোন | PhoneNumberKit | দেশের মান অনুযায়ী নম্বর | ইনপুট + যাচাই |
| মাস্ক | InputMask | কার্ড, কোড, SNILS, INN | রিয়েল-টাইম ইনপুট |
NSFormatter Foundation-এর একটি বিমূর্ত ক্লাস যা থেকে সমস্ত সিস্টেম iOS ফরম্যাটার উত্তরাধিকার সূত্রে প্রাপ্ত হয়। এটি দুটি প্রধান পদ্ধতি নির্ধারণ করে: string(for:) একটি অবজেক্টকে স্ট্রিংয়ে রূপান্তরের জন্য এবং getObjectValue(_:for:errorDescription:) স্ট্রিং থেকে অবজেক্টে বিপরীত রূপান্তরের জন্য। এই দ্বি-দিকনির্দেশক প্রক্রিয়া ডেটা প্রদর্শন এবং টেক্সট ফিল্ড থেকে পড়া উভয়েরই অনুমতি দেয়।
সিস্টেম ক্লাস দ্বারা আচ্ছাদিত নয় এমন নির্দিষ্ট বিন্যাসের জন্য NSFormatter-এর উপর ভিত্তি করে কাস্টম ফরম্যাটার তৈরি করা সম্ভব। এর জন্য string(for:) এবং getObjectValue(_:for:errorDescription:) পদ্ধতিগুলি ওভাররাইড করা প্রয়োজন। কাস্টম ফরম্যাটার UILabel, UITextField এবং formatter প্রপার্টির মাধ্যমে অন্যান্য ভিউ-এর সাথে ব্যবহার করা যেতে পারে।
Apple কাস্টম ফরম্যাটার তৈরি করার পরিবর্তে বিদ্যমান Foundation ফরম্যাটার ব্যবহার করার পরামর্শ দেয়। NumberFormatter সঠিকভাবে 32টি ভাষা এবং আঞ্চলিক মান পরিচালনা করে, DateFormatter বিভিন্ন সংস্কৃতির ক্যালেন্ডার বিবেচনা করে, এবং ByteCountFormatter মানের আকার অনুযায়ী বাইট, কিলোবাইট এবং মেগাবাইটের মধ্যে স্বয়ংক্রিয়ভাবে স্যুইচ করে।
NSFormatter ভুল ইনপুটের জন্য ত্রুটি বার্তার স্থানীয়করণও সমর্থন করে। getObjectValue পদ্ধতি একটি ত্রুটি বিবরণ প্রদান করে যা স্থানীয়কৃত আকারে ব্যবহারকারীকে দেখানো যেতে পারে। এটি বিশেষ করে সেইসব ফর্মের জন্য গুরুত্বপূর্ণ যেখানে ব্যবহারকারী ভুল বিন্যাসে ডেটা প্রবেশ করে — ত্রুটি বার্তা বোধগম্য এবং ইন্টারফেসের ভাষায় হওয়া উচিত।
Input Mask (ইনপুট মাস্ক)是一个 টেমপ্লেট যা ইনপুট ডেটার বিন্যাস নির্ধারণ করে এবং টাইপ করার সাথে সাথে স্বয়ংক্রিয়ভাবে বিভাজক সন্নিবেশ করে। মাস্কে প্লেসহোল্ডার অক্ষর (সাধারণত অঙ্কের জন্য 0 বা 9, অক্ষরের জন্য A) এবং ধ্রুবক অক্ষর (বন্ধনী, হাইফেন, স্পেস) থাকে যা স্বয়ংক্রিয়ভাবে সন্নিবেশিত হয়। ব্যবহারকারী শুধুমাত্র গুরুত্বপূর্ণ অক্ষর প্রবেশ করেন, এবং বিভাজকগুলি সিস্টেম দ্বারা সন্নিবেশিত হয়।
iOS-এর জন্য সবচেয়ে জনপ্রিয় লাইব্রেরি হল RedMadRobot-এর InputMask। এটি শর্ত, ঐচ্ছিক ব্লক এবং অ্যাফিক্স (উপসর্গ এবং প্রত্যয়) সহ জটিল মাস্ক সমর্থন করে। লাইব্রেরিটি একটি ডেলিগেটের মাধ্যমে বাস্তবায়িত, যা সাবক্লাসিং ছাড়াই যেকোনো UITextField-এর সাথে ব্যবহারের অনুমতি দেয়। ফোন নম্বর, ব্যাংক কার্ড, তারিখ, নিশ্চিতকরণ কোড এবং অন্যান্য সংগঠিত ডেটার জন্য মাস্ক সমর্থিত।
InputMask বিন্যাস নিজস্ব সিনট্যাক্স ব্যবহার করে: বাধ্যতামূলক অক্ষরের জন্য বর্গাকার বন্ধনী, ঐচ্ছিকের জন্য কোঁকড়া বন্ধনী, বন্ধনীর বাইরে ধ্রুবক অক্ষর। উদাহরণস্বরূপ, একটি কার্ড নম্বর মাস্ক [0000] [0000] [0000] [0000] এর মতো দেখায়, এবং একটি তারিখ মাস্ক [00]{.}[00]{.}[0000] এর মতো। কোঁকড়া বন্ধনীর ঐচ্ছিক ব্লকগুলি অদৃশ্য হয়ে যায় যদি ব্যবহারকারী তাদের জন্য ডেটা প্রবেশ না করে।
ফোন নম্বরের জন্য, মাস্কে সাধারণত অ্যাফিক্সে দেশের কোড অন্তর্ভুক্ত থাকে: +7 ([000]) [000]-[00]-[00]। ব্যবহারকারী নম্বরের মাত্র 10টি অঙ্ক প্রবেশ করেন, যখন +7, (, ), - অক্ষরগুলি স্বয়ংক্রিয়ভাবে সন্নিবেশিত হয়। একটি অক্ষর মুছে ফেলার সময়, মাস্ক সঠিকভাবে ব্যাকস্পেস পরিচালনা করে, শেষ গুরুত্বপূর্ণ অক্ষরটি সরিয়ে পূর্ববর্তী অবস্থানে ফিরে আসে।
ফোন নম্বর ফরম্যাটিং মোবাইল অ্যাপ্লিকেশনে ফরম্যাটারের সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্র। iOS এই উদ্দেশ্যে PhoneNumberKit ফ্রেমওয়ার্ক প্রদান করে, যা কোড দ্বারা স্বয়ংক্রিয়ভাবে দেশ সনাক্ত করে এবং সংশ্লিষ্ট জাতীয় বিন্যাস প্রয়োগ করে। লাইব্রেরি 200টিরও বেশি দেশ সমর্থন করে এবং নিয়মিত আপডেট হয়।
PhoneNumberKit দুটি ধাপে কাজ করে: বিন্যাস সনাক্তকরণ এবং এর প্রয়োগ। প্রথম ধাপে, লাইব্রেরি প্রবেশ করা দেশের কোড (উদাহরণস্বরূপ, +7 রাশিয়া সনাক্ত করে) বিশ্লেষণ করে এবং ফরম্যাটিং নিয়ম লোড করে। দ্বিতীয় ধাপে, এটি জাতীয় মান অনুযায়ী মাস্ক প্রয়োগ করে: রাশিয়ার জন্য +7 XXX XXX-XX-XX, USA-এর জন্য — +1 XXX-XXX-XXXX, UK-এর জন্য — +44 XXXX XXX XXX।
Apple Developer Documentation অনুসারে, iOS 16 থেকে UIContentUnavailableConfiguration-এর মাধ্যমে ফোন নম্বর ফরম্যাটিংয়ের একটি অন্তর্নির্মিত প্রক্রিয়া এসেছে। তবে সম্পূর্ণ রিয়েল-টাইম ফরম্যাটিংয়ের জন্য UITextFieldDelegate-এর মাধ্যমে PhoneNumberKit ব্যবহার করার পরামর্শ দেওয়া হয়। লাইব্রেরি নম্বরের বৈধতাও যাচাই করে: অঙ্কের সংখ্যা, দেশের কোডের বৈধতা এবং জাতীয় বিন্যাসের সাথে সামঞ্জস্যতা পরীক্ষা করে।
আন্তর্জাতিক অ্যাপ্লিকেশনের জন্য, এটি মনে রাখা গুরুত্বপূর্ণ যে ব্যবহারকারী যেকোনো বিন্যাসে নম্বর প্রবেশ করতে পারেন: +7, 8 (রাশিয়ার জন্য) বা দেশের কোড ছাড়া। একটি ভাল ফরম্যাটারের যেকোনো প্রাথমিক বিন্যাস চিনতে এবং + উপসর্গ ও দেশের কোড সহ একটি একক আন্তর্জাতিক মানে স্বাভাবিক করা উচিত।
Swift-এ ফরম্যাটার বাস্তবায়ন নির্বাচিত পদ্ধতির উপর নির্ভর করে। সিস্টেম Foundation ফরম্যাটারের জন্য, formatter প্রপার্টি ব্যবহার করা হয়, যা iOS 15 থেকে UITextField-এর জন্য উপলব্ধ। Input Mask-এর জন্য, InputMask লাইব্রেরির সাথে UITextFieldDelegate ব্যবহার করা হয়। ফোন নম্বরের জন্য — ডেলিগেটের মাধ্যমে PhoneNumberKit।
import PhoneNumberKit
class PhoneViewController: UIViewController {
let phoneNumberKit = PhoneNumberKit()
@IBOutlet var phoneField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
phoneField.delegate = self
}
}
extension PhoneViewController: UITextFieldDelegate {
func textField(
_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
guard let text = textField.text else { return true }
let partial = (text as NSString).replacingCharacters(in: range, with: string)
textField.text = partial.applyPhoneMask()
return false
}
}
NumberFormatter-এর জন্য iOS 15+-এ, UITextField-এ formatter প্রপার্টি উপলব্ধ যা টাইপ করার সাথে সাথে প্রবেশ করা নম্বর স্বয়ংক্রিয়ভাবে ফরম্যাট করে। এই পদ্ধতিতে ডেলিগেট বাস্তবায়নের প্রয়োজন হয় না এবং ব্যবহারকারীর স্থানীয় সেটিংস বিবেচনা করে মুদ্রা বিন্যাস, শতাংশ এবং অন্যান্য সংখ্যাসূচক ডেটার জন্য বাক্সের বাইরে কাজ করে।
let amountField = UITextField()
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "ru_RU")
amountField.formatter = formatter
RedMadRobot-এর InputMask লাইব্রেরির জন্য, সেটআপ মাস্ক আরম্ভকরণ এবং ডেলিগেটের মাধ্যমে প্রয়োগের মাধ্যমে সম্পন্ন হয়। লাইব্রেরি পেস্ট হ্যান্ডলিং, ব্যাকস্পেস মুছে ফেলা সমর্থন করে এবং টেক্সট নির্বাচনের সাথে সঠিকভাবে কাজ করে।
import InputMask
class CardViewController: UIViewController {
@IBOutlet var cardField: UITextField!
var listener: MaskedTextFieldDelegate!
override func viewDidLoad() {
super.viewDidLoad()
listener = MaskedTextFieldDelegate(
primaryMaskFormat: "[0000] [0000] [0000] [0000]"
)
cardField.delegate = listener
}
}
প্রায়শই জিজ্ঞাসিত প্রশ্ন
ফোন নম্বরের জন্য — PhoneNumberKit, সাধারণ উদ্দেশ্যের মাস্কের জন্য — RedMadRobot-এর InputMask। সংখ্যা এবং তারিখের জন্য, সিস্টেম NumberFormatter এবং DateFormatter যথেষ্ট।
হ্যাঁ, UITextView UITextField-এর মতো একই ডেলিগেট এবং shouldChangeCharactersIn পদ্ধতি সমর্থন করে। UITextViewDelegate বাস্তবায়নের মাধ্যমে ফরম্যাটার প্রয়োগ করা যেতে পারে।
পেস্টিং একই shouldChangeCharactersIn ডেলিগেটের মাধ্যমে পরিচালিত হয়। একটি ভাল ফরম্যাটার প্রথমে পেস্ট করা টেক্সট থেকে সমস্ত বিভাজক সরিয়ে ফেলে, তারপর পরিষ্কার ডেটাতে মাস্ক প্রয়োগ করে।
না, ইমেলের বিভাজক সহ কোন নির্দিষ্ট বিন্যাস নেই। ইমেলের জন্য, textContentType = .emailAddress এবং @ চিহ্ন সহ কীবোর্ড সেট করা যথেষ্ট।
আধুনিক ফরম্যাটারগুলি প্রতি অক্ষরে 1 মিলিসেকেন্ডেরও কম সময়ে ইনপুট প্রক্রিয়া করে। বিলম্ব ব্যবহারকারীর কাছে অদৃশ্য। InputMask এবং PhoneNumberKit লাইব্রেরিগুলি রিয়েল-টাইম অপারেশনের জন্য অপ্টিমাইজ করা।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন