UITextField iOS میں ایک سطر والے ٹیکسٹ ان پٹ کے لیے ایک معیاری UIKit جزو ہے، جو UIControl سے وراثت پاتا ہے اور کی بورڈ موڈز کی وسیع رینج کو سپورٹ کرتا ہے۔ Apple Developer دستاویزات (2025) کے مطابق، UITextField shouldBeginEditing، shouldChangeCharactersInRange اور shouldReturn کال بیکس کے ساتھ UITextFieldDelegate فراہم کرتا ہے۔ UITextView کے برعکس، UITextField ان پٹ کو ایک سطر تک محدود کرتا ہے اور کسٹم کنٹرولز کے لیے secureTextEntry، leftView اور rightView کو سپورٹ کرتا ہے۔ یہ iOS ایپلی کیشنز میں تصدیقی فارمز، تلاش، رجسٹریشن اور ڈیٹا ان پٹ کے لیے بنیادی عنصر ہے۔
اہم نکات
UITextField UIKit فریم ورک کا ایک کلاس ہے جو صارف کے ذریعے ایک سطر والے ٹیکسٹ ان پٹ کے لیے ڈیزائن کیا گیا ہے۔ یہ کلاس UIControl سے وراثت پاتی ہے، جو target-action میکانزم کے ذریعے ان پٹ ایونٹس کو سبسکرائب کرنے کی اجازت دیتی ہے: 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 پراپرٹی کے ذریعے 12 کی بورڈ اقسام کو سپورٹ کرتا ہے۔ ہر قسم ایک مخصوص ان پٹ منظر نامے کے لیے کریکٹر سیٹ کو بہتر بناتی ہے۔ 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، کوڈ | صرف ہندسے 0-9 |
| 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 استعمال کریں۔ پراپرٹیز فیلڈ کے ڈسپلے ہونے سے پہلے اس کی ابتدا کے بعد ترتیب دی جاتی ہیں۔ پراپرٹیز کو متحرک طور پر تبدیل کرنے سے اگلی ظاہری شکل پر کی بورڈ اپ ڈیٹ ہو جاتا ہے۔
Return Key Type کی بورڈ پر بٹن کا متن متعین کرتا ہے: Next — اگلے فیلڈ پر جائیں، Done — ان پٹ مکمل کریں، Search — تلاش شروع کریں، Send — فارم جمع کروائیں، Continue — بھرنا جاری رکھیں۔ shouldReturn ڈیلیگیٹ طریقہ کے ساتھ مل کر، returnKeyType ایک قدرتی UX ممکن بناتا ہے: صارف فیلڈ بھرتا ہے، اگلے پر جانے کے لیے Next دباتا ہے اور آخری فیلڈ پر جمع کروانے کے لیے Done دباتا ہے۔ بٹن ٹیکسٹ کی تخصیص کے لیے، iOS 15+ میں 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں