UITextField হল iOS-এ একক-লাইন টেক্সট ইনপুটের জন্য একটি স্ট্যান্ডার্ড UIKit কম্পোনেন্ট, যা UIControl থেকে ইনহেরিট করে এবং কীবোর্ড মোডের একটি বিস্তৃত পরিসর সমর্থন করে। Apple Developer ডকুমেন্টেশন (2025) অনুযায়ী, UITextField shouldBeginEditing, shouldChangeCharactersInRange এবং shouldReturn কলব্যাক সহ UITextFieldDelegate প্রদান করে। UITextView-এর বিপরীতে, UITextField ইনপুটকে একটি একক লাইনে সীমাবদ্ধ করে এবং কাস্টম কন্ট্রোলের জন্য secureTextEntry, leftView এবং rightView সমর্থন করে। এটি iOS অ্যাপ্লিকেশনে অথেনটিকেশন ফর্ম, অনুসন্ধান, নিবন্ধন এবং ডেটা ইনপুটের জন্য প্রধান উপাদান।
মূল বৈশিষ্ট্য
UITextField হল UIKit ফ্রেমওয়ার্কের একটি ক্লাস যা ব্যবহারকারীর দ্বারা একক-লাইন টেক্সট ইনপুটের জন্য ডিজাইন করা হয়েছে। ক্লাসটি UIControl থেকে ইনহেরিট করে, যা টার্গেট-অ্যাকশন মেকানিজমের মাধ্যমে ইনপুট ইভেন্টে সাবস্ক্রাইব করার অনুমতি দেয়: addTarget(self, action: Selector("textChanged:"), for: editingChanged)। UITextField একটি বর্ডার (borderStyle), ফিল্ড খালি থাকলে প্লেসহোল্ডার টেক্সট, একটি ক্লিয়ার বাটন (clearButtonMode) প্রদর্শন করে এবং বাম/ডান সহায়ক ভিউ ধারণ করতে পারে। ফিল্ডটি becomeFirstResponder এবং resignFirstResponder-এর মাধ্যমে ফোকাস পাওয়া/হারানোর সময় স্বয়ংক্রিয়ভাবে কীবোর্ড দেখায়/লুকায়। ফিল্ডের আকার ফন্ট এবং বর্ডার স্টাইলের উপর ভিত্তি করে intrinsicContentSize দ্বারা নির্ধারিত হয়। Interface Builder (Storyboard/XIB)-এ UITextField তৈরি করতে, Object Library ব্যবহার করুন; প্রোগ্রামেটিকভাবে, ইনিশিয়ালাইজার UITextField(frame: CGRect) ব্যবহার করুন। ক্লাসটি আধুনিক iOS আর্কিটেকচারের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ: Combine publishers, UIViewRepresentable-এর মাধ্যমে SwiftUI-তে @Published এবং ফর্মের জন্য Diffable Data Source।
UITextField keyboardType প্রপার্টির মাধ্যমে ১২টি কীবোর্ড টাইপ সমর্থন করে। প্রতিটি টাইপ একটি নির্দিষ্ট ইনপুট পরিস্থিতির জন্য অক্ষর সেট অপ্টিমাইজ করে। UIKeyboardType.default — স্ট্যান্ডার্ড QWERTY কীবোর্ড। UIKeyboardType.numberPad — অতিরিক্ত প্রতীক ছাড়া শুধুমাত্র সংখ্যা (PIN কোড এবং ফোন নম্বরের জন্য আদর্শ)। UIKeyboardType.emailAddress — মূল লেয়ারে @ এবং ডট সহ কীবোর্ড। UIKeyboardType.URL — মূল লেয়ারে .com, / এবং ডট সহ কীবোর্ড। UIKeyboardType.phonePad — ফোন নম্বর ইনপুটের জন্য +, *, # সহ সংখ্যাসূচক কীপ্যাড। UIKeyboardType.decimalPad — মূল্য ইনপুটের জন্য দশমিক বিন্দু সহ সংখ্যা। UIKeyboardType.webSearch — সার্চ কোয়েরির জন্য অপ্টিমাইজড Go বাটন সহ কীবোর্ড। UIKeyboardType.asciiCapable — ল্যাটিন টেক্সটের জন্য শুধুমাত্র ASCII অক্ষর। becomeFirstResponder কল করলে কীবোর্ড প্রদর্শিত হয় এবং resignFirstResponder কল করলে লুকিয়ে যায়। সম্পাদনার সময় কীবোর্ড টাইপ গতিশীলভাবে পরিবর্তন করা যেতে পারে।
| টাইপ | পরিস্থিতি | বৈশিষ্ট্য |
|---|---|---|
| default | সাধারণ টেক্সট ইনপুট | স্ট্যান্ডার্ড QWERTY |
| numberPad | PIN, কোড | শুধুমাত্র সংখ্যা ০-৯ |
| emailAddress | ইমেইল | মূল লেয়ারে @ এবং . |
| URL | ওয়েব ঠিকানা | মূলে .com, /, . |
| phonePad | ফোন | সংখ্যা, +, *, # |
| decimalPad | মূল্য, সংখ্যা | সংখ্যা + দশমিক বিন্দু |
UITextFieldDelegate হল একটি প্রোটোকল যা ইনপুটের বিভিন্ন পর্যায়ে টেক্সট ফিল্ডের আচরণ নির্ধারণ করে। মূল মেথড: textFieldShouldBeginEditing(textField) — একটি Bool রিটার্ন করে যা সম্পাদনা শুরু করার অনুমতি বা অস্বীকার করে; textFieldDidBeginEditing — কীবোর্ড প্রদর্শিত হওয়ার পরে কল করা হয়; textFieldShouldEndEditing — সম্পাদনা সম্পূর্ণ করা সম্ভব কিনা তা পরীক্ষা করে (যদি false হয়, ফিল্ড ফোকাস হারায় না); textFieldDidEndEditing — কীবোর্ড লুকানোর পরে কল করা হয়; textFieldShouldChangeCharactersInRange — প্রতিটি অক্ষর ইনপুটে কল করা হয়, ইনপুট ফিল্টার করার অনুমতি দেয় (শুধুমাত্র একটি অক্ষর অনুমোদিত, false রিটার্ন করলে অক্ষর যোগ হবে না); textFieldShouldReturn — Return/Go/Next/Search চাপলে কল করা হয়, পরবর্তী ফিল্ডে যেতে ব্যবহৃত হয়। ডেলিগেটটি Optional নয়: সমস্ত মেথডের ডিফল্ট বাস্তবায়ন আছে, তবে কাস্টম আচরণের জন্য আপনাকে সংশ্লিষ্ট মেথড ওভাররাইড করতে হবে।
shouldReturn মেথড হল ফর্ম ফিল্ডের মধ্যে নেভিগেট করার স্ট্যান্ডার্ড প্যাটার্ন। বাস্তবায়ন: textFieldShouldReturn(textField) — পরীক্ষা করুন কোন textField ইভেন্ট ট্রিগার করেছে এবং becomeFirstResponder()-এর মাধ্যমে ফোকাস পরবর্তী ফিল্ডে সরান। যদি এটি শেষ ফিল্ড হয়, কীবোর্ড লুকাতে resignFirstResponder() কল করুন। ফিল্ড রেফারেন্স সংরক্ষণ করতে প্রতিটি ফিল্ডের জন্য IBOutlet collection বা পৃথক IBOutlet ব্যবহার করুন।
isSecureTextEntry — UITextField-এর একটি প্রপার্টি যা true হলে ইনপুট অক্ষরগুলিকে বুলেট (•) দিয়ে প্রতিস্থাপন করে এবং UIMenuController-এর মাধ্যমে টেক্সট কপি করা ব্লক করে। পাসওয়ার্ড ফিল্ড, PIN কোড, CVV-এর জন্য ব্যবহৃত হয়। সুরক্ষিত মোড এবং সাধারণ টেক্সটের (show/hide password) মধ্যে স্যুইচ করার সময়, textField.isSecureTextEntry.toggle() সেট করুন। গুরুত্বপূর্ণ: isSecureTextEntry পরিবর্তন করলে ফিল্ডের টেক্সট রিসেট হয় — এটি আগেই সংরক্ষণ করুন। LeftView এবং RightView হল কাস্টম UIView যা ইনপুট ফিল্ডের ভিতরে বাম বা ডানে প্রদর্শিত হয়। সাধারণ ব্যবহার: leftView-তে সার্চ আইকন, rightView-তে "ক্লিয়ার" বাটন। কনফিগারেশন: textField.leftViewMode = always (সর্বদা) বা whileEditing (শুধুমাত্র সম্পাদনার সময়)। left/right ভিউ প্যাডিং বিবেচনা করে স্বয়ংক্রিয়ভাবে টেক্সট ফিল্ডের ভিতরে অবস্থান করে। ভিউয়ের আকার bounds বা Auto Layout-এর মাধ্যমে সেট করা হয়।
import UIKit
class LoginViewController: UIViewController {
let passwordField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
passwordField.isSecureTextEntry = true
passwordField.placeholder = "Password"
passwordField.keyboardType = .asciiCapable
passwordField.delegate = self
// কাস্টম পাসওয়ার্ড দেখান/লুকান বাটন
let showButton = UIButton(type: .system)
showButton.setTitle("দেখান", for: .normal)
showButton.addTarget(self, action: #selector(togglePasswordVisibility),
for: .touchUpInside)
passwordField.rightView = showButton
passwordField.rightViewMode = .always
}
@objc func togglePasswordVisibility() {
passwordField.isSecureTextEntry.toggle()
}
}
UITextInputTraits হল একটি প্রোটোকল যা UITextField-এর জন্য কীবোর্ডের ভিজ্যুয়াল এবং আচরণগত চেহারা নির্ধারণ করে। মূল প্রপার্টি: autocorrectionType (.default, .no, .yes) — টেক্সট অটোকারেকশন সক্ষম বা অক্ষম করে; autocapitalizationType (.none, .words, .sentences, .allCharacters) — প্রথম অক্ষরের জন্য স্বয়ংক্রিয় ক্যাপস লক; spellCheckingType — বানান পরীক্ষা; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — কীবোর্ডে Return বাটনের টেক্সট; enablesReturnKeyAutomatically — ফিল্ড খালি থাকলে Return বাটনের স্বয়ংক্রিয় নিষ্ক্রিয়করণ। নাম ইনপুট ফিল্ডের জন্য, autocapitalizationType = .words ব্যবহার করুন; ইমেইলের জন্য, autocorrectionType = .no ব্যবহার করুন; URL-এর জন্য, keyboardType = .URL + autocapitalizationType = .none ব্যবহার করুন। ফিল্ড প্রদর্শনের আগে এর ইনিশিয়ালাইজেশনের পরে Traits কনফিগার করা হয়। Traits গতিশীলভাবে পরিবর্তন করলে পরবর্তী উপস্থিতিতে কীবোর্ড আপডেট হয়।
Return Key Type কীবোর্ডে বাটনের টেক্সট নির্ধারণ করে: Next — পরবর্তী ফিল্ডে যান, Done — ইনপুট সম্পূর্ণ করুন, Search — অনুসন্ধান শুরু করুন, Send — ফর্ম জমা দিন, Continue — পূরণ চালিয়ে যান। shouldReturn ডেলিগেট মেথডের সাথে মিলিত হয়ে, returnKeyType একটি প্রাকৃতিক UX সক্ষম করে: ব্যবহারকারী ফিল্ড পূরণ করে, পরবর্তীতে যেতে Next চাপে, এবং শেষ ফিল্ডে জমা দিতে Done চাপে। বাটন টেক্সট কাস্টমাইজেশনের জন্য, iOS ১৫+ এ UIButtonConfiguration ব্যবহার করুন।
UITextField প্লেসহোল্ডার হল টেক্সট যা ফিল্ড খালি থাকলে ধূসর রঙে প্রদর্শিত হয়। কনফিগারেশন: textField.placeholder = "Enter email"। প্লেসহোল্ডারের রঙ এবং ফন্ট কাস্টমাইজ করতে, NSAttributedString-এর সাথে attributedPlaceholder ব্যবহার করুন। ইনপুট মাস্ক ডেলিগেট মেথড shouldChangeCharactersInRange-এর মাধ্যমে বাস্তবায়িত হয় — ফোন নম্বর, তারিখ, ক্রেডিট কার্ড এবং SNILS ফরম্যাট সমর্থন করে। ইনপুট মাস্ক প্রদর্শনকে মান থেকে পৃথক করার অনুমতি দেয়: ব্যবহারকারী ফরম্যাটেড টেক্সট দেখে (যেমন, +7 (999) 999-99-99), যখন মডেল "79999999999" সংরক্ষণ করে। বাস্তবায়ন উদাহরণ: প্রতিস্থাপনের জন্য X অক্ষর সহ একটি স্ট্রিং হিসাবে মাস্ক সংরক্ষণ করুন; প্রতিটি ইনপুটে, ফরম্যাটেড স্ট্রিং তৈরি করুন এবং shouldChangeCharactersInRange-এ false রিটার্ন করুন, textField.text = formattedText-এর মাধ্যমে ফিল্ড টেক্সট প্রতিস্থাপন করুন। সংখ্যার জন্য, NumberFormatter এবং decimal keyboardType ব্যবহার করুন।
extension LoginViewController: UITextFieldDelegate {
func textFieldShouldReturn(
textField: UITextField
) -> Bool {
if textField == emailField {
passwordField.becomeFirstResponder()
} else if textField == passwordField {
textField.resignFirstResponder()
loginTapped()
}
return true
}
func textField(
textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String
) -> Bool {
// ইমেলে স্পেস ব্লক করুন
if textField == emailField && string == " " {
return false
}
// পাসওয়ার্ড দৈর্ঘ্যের সীমা
if textField == passwordField {
let newLength = (textField.text?.count ?? 0) +
string.count - range.length
return newLength <= 32
}
return true
}
}
আসুন UITextField, ইমেইল ভ্যালিডেশন এবং ভিজ্যুয়াল প্রতিক্রিয়া সহ একটি লগইন ফর্ম বাস্তবায়নের একটি সম্পূর্ণ উদাহরণ দেখি। ফর্মটিতে দুটি ফিল্ড রয়েছে: emailField (emailAddress কীবোর্ড, কোন অটোকারেকশন নেই) এবং passwordField (secureTextEntry)। ভ্যালিডেশন shouldChangeCharactersInRange-এ এবং অতিরিক্তভাবে Login বাটন চাপলে সঞ্চালিত হয়। ভিজ্যুয়াল প্রতিক্রিয়ার জন্য: ত্রুটিতে লাল বর্ডার (layer.borderColor), সফল ভ্যালিডেশনে সবুজ। textFieldDidBeginEditing-এ সম্পাদনা শুরু হলে বর্ডার রিসেট।
ইমেইল ভ্যালিডেশন ফরম্যাট "SELF MATCHES %@" সহ NSPredicate এবং মৌলিক ফরম্যাট পরীক্ষার জন্য রেগুলার এক্সপ্রেশনের মাধ্যমে সঞ্চালিত হয়। প্রকৃত ইমেইল অস্তিত্ব পরীক্ষা সার্ভারে করা উচিত। উন্নত ভ্যালিডেশনের জন্য, SwiftValidators লাইব্রেরি বা Combine publishers ব্যবহার করুন। উদাহরণ: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email)। মসৃণ ট্রানজিশনের জন্য ফিল্ড বর্ডার একটি অ্যানিমেশন ব্লকের মাধ্যমে আপডেট হয়।
func validateEmail(textField: UITextField) {
guard let text = textField.text, !text.isEmpty else {
textField.layer.borderColor = UIColor.clear.cgColor
return
}
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.\\p{L}{2,}"
let predicate = NSPredicate(format: "SELF MATCHES [c] %@", emailRegex)
let isValid = predicate.evaluate(with: text)
UIView.animate(withDuration: 0.2) {
textField.layer.borderColor = isValid
? UIColor.systemGreen.cgColor
: UIColor.systemRed.cgColor
textField.layer.borderWidth = 1.0
textField.layer.cornerRadius = 6.0
}
}
প্রায়শই জিজ্ঞাসিত প্রশ্ন
ডেলিগেট মেথড shouldChangeCharactersInRange ব্যবহার করুন। নতুন টেক্সটের দৈর্ঘ্য existingText.count + newText.count - range.length হিসাবে গণনা করুন এবং সীমা অতিক্রম করলে false রিটার্ন করুন। বিকল্পভাবে: addTarget-এর মাধ্যমে editingChanged ইভেন্টে সাবস্ক্রাইব করুন এবং textField.text = String(text.prefix(maxLength)) ব্যবহার করে টেক্সট ছোট করুন।
পরীক্ষা করুন: isUserInteractionEnabled = true (ডিফল্ট), ডেলিগেট shouldBeginEditing-এ false রিটার্ন করছে না। যদি ফিল্ড UIScrollView-এর ভিতরে থাকে, delaysContentTouches অক্ষম করুন। যদি ফিল্ড মডেল কন্ট্রোলারে থাকে, এটি স্পর্শ ব্লক করছে কিনা পরীক্ষা করুন। SwiftUI UIViewRepresentable-এর জন্য, ফিল্ডটি DispatchQueue.main.async-এর মাধ্যমে সঠিকভাবে firstResponder হচ্ছে কিনা পরীক্ষা করুন।
self.view বা scrollView-এ একটি UITapGestureRecognizer যোগ করুন যার target-action view.endEditing(true) কল করে। বিকল্প: নির্দিষ্ট ফিল্ডের কীবোর্ড লুকাতে textField.resignFirstResponder()। UIViewController-এ touchesBegan বাস্তবায়ন করুন বা স্বয়ংক্রিয় কীবোর্ড ব্যবস্থাপনার জন্য IQKeyboardManager লাইব্রেরি ব্যবহার করুন। বাটনের সঠিক আচরণের জন্য cancelsTouchesInView অক্ষম করতে ভুলবেন না।
টেক্সট রঙ: textField.textColor = UIColor.label। ফন্ট: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular)। প্লেসহোল্ডার রঙ: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel])।
তিনটি উপায়: isEnabled = false (চেহারা পরিবর্তন করে), isUserInteractionEnabled = false (ভিজ্যুয়াল স্টাইল বজায় রাখে), অথবা textFieldShouldBeginEditing ডেলিগেটে false রিটার্ন করুন। তৃতীয় উপায়টি পছন্দনীয় — এটি ভিজ্যুয়াল স্টাইল পরিবর্তন না করেই ইনপুট ব্লক করে। শুধুমাত্র-পঠনযোগ্য মোডে প্রোগ্রামেটিকভাবে টেক্সট সেট করতে, ডেলিগেট ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন