UITextField — nima, matn kiritish maydonini sozlash va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-07-06 O'qish vaqti: 8 daq

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 — delegat va maxsus klaviaturalarni qo'llab-quvvatlaydigan UIKitning bir qatorli matn kiritish maydoni
  • UIKeyboardType — 12 turdagi klaviatura: numberPad, emailAddress, URL, phonePad va boshqalar
  • UITextFieldDelegate — shouldBegin/End/Change callbacklari orqali kiritish hayotiy siklini boshqarish
  • Secure Text Entry — isSecureTextEntry orqali belgilarni nuqtalar bilan almashtirish orqali parol kiritish rejimi
  • Left/Right View — UX yaxshilash uchun kiritish maydoni ichidagi maxsus ikonkalar va tugmalar

UITextField nima

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.

UIKeyboardType klaviatura turlari

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.

TurStsenariyXususiyatlari
defaultUmumiy matn kiritishStandart QWERTY
numberPadPIN, kodFaqat 0-9 raqamlari
emailAddressElektron pochta@ va . asosiy qatlamda
URLVeb-manzil.com, /, . asosiy qatlamda
phonePadTelefonRaqamlar, +, *, #
decimalPadNarx, sonRaqamlar + o'nli nuqta

UITextFieldDelegate delegati va uning metodlari

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 orqali fokusni boshqarish

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.

Secure Text Entry va maxsus left/right view

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.

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

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 va forma bo'yicha navigatsiya

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, formatlash va kiritish maskasi

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.

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

Kod namunalari: validatsiya va forma

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.

Regex bilan elektron pochta validatsiyasi

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.

swift
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

UITextFieldda belgilar sonini qanday cheklash mumkin?

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.

Nega UITextField teginishga reaksiya bermaydi?

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.

UITextFielddan tashqariga tegib klaviaturani qanday yashirish mumkin?

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.

UITextField matn rangi va shriftini qanday o'zgartirish mumkin?

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]).

UITextFieldni faqat o'qish uchun qanday qilish mumkin?

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

  • UITextField — UIControldan meros olish va delegat boshqaruvi bilan UIKitning bir qatorli matn kiritish maydoni
  • UIKeyboardType — turli stsenariylar uchun 12 klaviatura turi: email, URL, numberPad, phonePad
  • UITextFieldDelegate — kiritishni boshqarish uchun shouldBegin/End/Change/Return metodlari bilan protokol
  • Secure Text Entry — isSecureTextEntry orqali belgilarni nuqtalar bilan almashtiruvchi parol rejimi
  • Left/Right View — always/whileEditing rejimlari bilan maydon ichidagi maxsus elementlar (ikonkalar, tugmalar)
  • Return Key Type — forma navigatsiyasi uchun Return tugmasini sozlash: Next, Done, Search, Send
  • Validatsiya — regex bilan shouldChangeCharactersInRange va ramka orqali vizual fikr-mulohaza
  • Placeholder maxsus uslub uchun NSAttributedString bilan attributedPlaceholder orqali sozlanadi

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.

Loyihani muhokama qilish

Shuningdek o'qing