UITextField — iOSda bir qatorli matn kiritish uchun standart UIKit komponenti bo'lib, UIControldan meros oladi va klaviatura rejimlarining keng spektrini qo'llab-quvvatlaydi. Apple Developer (2025) hujjatlariga ko'ra, UITextField shouldBeginEditing, shouldChangeCharactersInRange va shouldReturn callbacklari bilan UITextFieldDelegate delegatini taqdim etadi. UITextViewdan farqli o'laroq, UITextField kiritishni bir qator bilan cheklaydi va maxsus boshqaruv elementlari uchun secureTextEntry, leftView va rightViewni qo'llab-quvvatlaydi. Bu iOS ilovalarida kirish, qidirish, ro'yxatdan o'tish va ma'lumot kiritish formalari uchun asosiy elementdir.
Asosiy
UITextField — foydalanuvchi tomonidan bir qatorli matn kiritish uchun mo'ljallangan UIKit framework sinfidir. Sinf UIControldan meros oladi, bu target-action mexanizmi orqali kiritish hodisalariga obuna bo'lish imkonini beradi: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField ramka (borderStyle), bo'sh maydonda placeholder matni, tozalash tugmasi (clearButtonMode) ko'rsatadi va chap/o'ng yordamchi viewlarni o'z ichiga olishi mumkin. Maydon avtomatik ravishda becomeFirstResponder va resignFirstResponder orqali fokusni qabul qilganda/yo'qotganda klaviaturani ko'rsatadi/yashiradi. Maydon o'lchami font va border style asosida intrinsicContentSize orqali aniqlanadi. Interface Builderda (Storyboard/XIB) UITextField yaratish uchun Object Library ishlatiladi, dasturiy ravishda — UITextField(frame: CGRect) initsializatori orqali. Sinf zamonaviy iOS arxitekturasi bilan to'liq mos keladi: Combine publishers, SwiftUIda UIViewRepresentable orqali @Published va formalar uchun Diffable Data Source.
UITextField keyboardType xususiyati orqali 12 turdagi klaviaturani qo'llab-quvvatlaydi. Har bir tur ma'lum bir kiritish stsenariysi uchun belgilar to'plamini optimallashtiradi. UIKeyboardType.default — standart QWERTY klaviaturasi. UIKeyboardType.numberPad — qo'shimcha belgilarsiz faqat raqamlar (PIN-kodlar va telefon raqamlari uchun ideal). UIKeyboardType.emailAddress — asosiy qatlamda @ va nuqta belgisi bo'lgan klaviatura. UIKeyboardType.URL — asosiy qatlamda .com, / va . bo'lgan klaviatura. UIKeyboardType.phonePad — telefon raqamlarini kiritish uchun +, *, # bilan raqamli klaviatura. UIKeyboardType.decimalPad — narxlarni kiritish uchun o'nli nuqta bilan raqamlar. UIKeyboardType.webSearch — Go tugmasi va qidiruv so'rovlari uchun optimallashtirilgan klaviatura. UIKeyboardType.asciiCapable — Lotin alifbosi uchun faqat ASCII belgilar. Klaviatura becomeFirstResponder chaqirilganda ko'rsatiladi va resignFirstResponder chaqirilganda yashiriladi. Klaviatura turi tahrirlash vaqtida dinamik ravishda o'zgartirilishi mumkin.
| Tur | Stsenariy | Xususiyatlari |
|---|---|---|
| default | Umumiy matn kiritish | Standart QWERTY |
| numberPad | PIN, kod | Faqat 0-9 raqamlari |
| emailAddress | Elektron pochta | @ va . asosiy qatlamda |
| URL | Veb-manzil | .com, /, . asosiy qatlamda |
| phonePad | Telefon | Raqamlar, +, *, # |
| decimalPad | Narx, son | Raqamlar + o'nli nuqta |
UITextFieldDelegate — matn maydonining harakatini kiritishning turli bosqichlarida belgilaydigan protokol. Asosiy metodlar: textFieldShouldBeginEditing(textField) — tahrirlashni boshlashga ruxsat beruvchi yoki ta'qiqlovchi Bool qaytaradi; textFieldDidBeginEditing — klaviatura paydo bo'lgandan keyin chaqiriladi; textFieldShouldEndEditing — tahrirlash tugallanishi mumkinligini tekshiradi (false bo'lganda maydon fokusni yo'qotmaydi); textFieldDidEndEditing — klaviatura yashirilgandan keyin chaqiriladi; textFieldShouldChangeCharactersInRange — har bir belgi kiritilganda chaqiriladi, kiritishni filtrlash imkonini beradi (faqat bitta belgiga ruxsat beriladi, false qaytarilsa belgi qo'shilmaydi); textFieldShouldReturn — Return/Go/Next/Search bosilganda chaqiriladi, keyingi maydonga o'tish uchun ishlatiladi. Delegat Optional emas: barcha metodlarning standart implementatsiyasi mavjud, ammo maxsus harakat uchun tegishli metodni override qilish kerak.
shouldReturn metodi — forma maydonlari o'rtasida navigatsiya uchun standart andoza. Implementatsiya: textFieldShouldReturn(textField) — qaysi textField hodisani chaqirganini tekshiramiz va becomeFirstResponder() orqali fokusni keyingi maydonga o'tkazamiz. Agar bu oxirgi maydon bo'lsa — klaviaturani yashirish uchun resignFirstResponder() chaqiramiz. Maydonlarga havolalarni saqlash uchun IBOutlet collection yoki har bir maydon uchun alohida IBOutlet ishlating.
isSecureTextEntry — UITextField xususiyati, true bo'lganda kiritilgan belgilarni nuqtalar (•) bilan almashtiradi va UIMenuController orqali matn nusxalanishini bloklaydi. Parol, PIN-kod, CVV maydonlari uchun ishlatiladi. Secure rejim va oddiy matn o'rtasida o'tishda (show/hide password) textField.isSecureTextEntry.toggle() o'rnating. Muhim: isSecureTextEntry o'zgartirilganda maydon matni tiklanadi — uni oldindan saqlang. LeftView va RightView — kiritish maydoni ichida chapda yoki o'ngda ko'rsatiladigan maxsus UIViewlar. Odatda foydalanish: leftViewda qidiruv ikonkasi, rightViewda "Tozalash" tugmasi. Sozlash: textField.leftViewMode = always (har doim) yoki whileEditing (faqat tahrirlashda). Left/right view avtomatik ravishda matn maydoni ichida padding hisobga olingan holda joylashtiriladi. View o'lchami bounds yoki Auto Layout orqali aniqlanadi.
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
// Parolni ko'rsatish/yashirish uchun maxsus tugma
let showButton = UIButton(type: .system)
showButton.setTitle("Ko'rsatish", for: .normal)
showButton.addTarget(self, action: #selector(togglePasswordVisibility),
for: .touchUpInside)
passwordField.rightView = showButton
passwordField.rightViewMode = .always
}
@objc func togglePasswordVisibility() {
passwordField.isSecureTextEntry.toggle()
}
}
UITextInputTraits — UITextField uchun klaviatura vizual va xulq-atvorni sozlashni belgilaydigan protokol. Asosiy xususiyatlar: autocorrectionType (.default, .no, .yes) — matn avtotuzatishini yoqadi yoki o'chiradi; autocapitalizationType (.none, .words, .sentences, .allCharacters) — birinchi belgi uchun avtomatik Caps Lock; spellCheckingType — imlo tekshiruvi; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — klaviaturada Return tugmasi matni; enablesReturnKeyAutomatically — bo'sh maydonda Return tugmasini avtomatik bloklash. Ism kiritish maydonlari uchun autocapitalizationType = .words, elektron pochta uchun — autocorrectionType = .no, URL uchun — keyboardType = .URL + autocapitalizationType = .none ishlating. Traits sozlamalari maydon initsializatsiyasidan keyin, ko'rsatilishidan oldin amalga oshiriladi. Traitsni o'zgartirish keyingi ko'rinishda klaviaturani dinamik ravishda yangilaydi.
Return Key Type klaviaturadagi tugma matnini belgilaydi: Next — keyingi maydonga o'tish, Done — kiritishni tugatish, Search — qidiruvni boshlash, Send — formani yuborish, Continue — to'ldirishni davom ettirish. shouldReturn delegat metodi bilan birgalikda, returnKeyType tabiiy UX yaratish imkonini beradi: foydalanuvchi keyingi maydonga o'tish uchun Next va oxirgi maydonda yuborish uchun Done tugmasini bosadi. Tugma matnini sozlash uchun iOS 15+ da UIButtonConfiguration ishlating.
Placeholder UITextField — maydon bo'sh bo'lganda kul rangda ko'rsatiladigan matn. Sozlash: textField.placeholder = "Enter email". Placeholder rangi va shriftini sozlash uchun NSAttributedString bilan attributedPlaceholder ishlating. Kiritish maskasi shouldChangeCharactersInRange delegat metodi orqali amalga oshiriladi — telefon raqami, sana, kredit karta, SNILS formati qo'llab-quvvatlanadi. Kiritish maskasi ko'rsatish va qiymatni ajratish imkonini beradi: foydalanuvchi formatlangan matnni ko'radi (masalan, +7 (999) 999-99-99), modelda esa "79999999999" saqlanadi. Implementatsiya namunasi: maskani almashtirish uchun X belgilari bilan qator sifatida saqlaymiz; har bir kiritishda formatlangan qator yaratamiz va shouldChangeCharactersInRangeda false qaytaramiz, maydon matnini textField.text = formattedText orqali almashtiramiz. Raqamlar uchun NumberFormatter va o'nli keyboardType ishlating.
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 {
// Elektron pochtadagi bo'shliqlarni bloklash
if textField == emailField && string == " " {
return false
}
// Parol uzunligi cheklovi
if textField == passwordField {
let newLength = (textField.text?.count ?? 0) +
string.count - range.length
return newLength <= 32
}
return true
}
}
UITextField bilan kirish formasining, elektron pochta validatsiyasi va vizual fikr-mulohaza bilan to'liq implementatsiya misolini ko'rib chiqaylik. Forma ikkita maydonni o'z ichiga oladi: emailField (emailAddress klaviatura, avtotuzatish yo'q) va passwordField (secureTextEntry). Validatsiya shouldChangeCharactersInRangeda va qo'shimcha ravishda Login tugmasi bosilganda amalga oshiriladi. Vizual fikr-mulohaza uchun: xato bo'lganda qizil ramka (layer.borderColor), muvaffaqiyatli validatsiyada — yashil. Tahrirlash boshlanganda ramkani tiklash textFieldDidBeginEditingda.
Elektron pochta validatsiyasi "SELF MATCHES %@" formati bilan NSPredicate va formatni asosiy tekshirish uchun muntazam ifoda orqali amalga oshiriladi. Elektron pochta mavjudligini haqiqiy tekshirish serverda amalga oshirilishi kerak. Ilg'or validatsiya uchun SwiftValidators kutubxonasi yoki Combine publishers ishlating. Misol: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Maydon ramkasi silliq o'tish uchun animation block orqali yangilanadi.
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
}
}
Tez-tez beriladigan savollar
shouldChangeCharactersInRange delegat metodidan foydalaning. Matnning yangi uzunligini existingText.count + newText.count - range.length sifatida hisoblang va limit oshib ketgan bo'lsa false qaytaring. Alternativ: addTarget orqali editingChanged hodisasiga obuna bo'ling va matnni textField.text = String(text.prefix(maxLength)) orqali qisqartiring.
Tekshiring: isUserInteractionEnabled = true (standart), delegat shouldBeginEditingda false qaytarmaydi. Maydon UIScrollView ichida bo'lsa — delaysContentTouchesni o'chiring. Maydon modal kontrollerda bo'lsa — u teginishlarni bloklamayotganini tekshiring. SwiftUI UIViewRepresentable uchun maydon DispatchQueue.main.async orqali to'g'ri firstResponder bo'lishini tekshiring.
UITapGestureRecognizerni self.view yoki scrollViewga view.endEditing(true) chaqiradigan target-action bilan qo'shing. Alternativ: aniq maydon klaviaturasini yashirish uchun textField.resignFirstResponder(). UIViewControllerda touchesBegan sozlang yoki avtomatik klaviatura boshqaruvi uchun IQKeyboardManager kutubxonasidan foydalaning. Tugmalarning to'g'ri ishlashi uchun cancelsTouchesInViewni o'chirishni unutmang.
Matn rangi: textField.textColor = UIColor.label. Shrift: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Placeholder rangi: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).
Uch usul: isEnabled = false (ko'rinishni o'zgartiradi), isUserInteractionEnabled = false (vizual uslubni saqlaydi) yoki delegatning textFieldShouldBeginEditingida false qaytaring. Uchinchi usul afzal — vizual uslubni o'zgartirmasdan kiritishni bloklaydi. Faqat o'qish rejimida matnni dasturiy ravishda o'rnatish uchun delegatdan foydalaning.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing