UITextField — iOS-da tək sətirli mətn daxil etmək üçün standart UIKit komponentidir, UIControl-dan miras alır və geniş klaviatura rejimlərini dəstəkləyir. Apple Developer (2025) sənədləşməsinə görə, UITextField shouldBeginEditing, shouldChangeCharactersInRange və shouldReturn callback-ləri ilə UITextFieldDelegate delegatını təmin edir. UITextView-dən fərqli olaraq, UITextField daxilolmanı bir sətirlə məhdudlaşdırır və xüsusi nəzarət elementləri üçün secureTextEntry, leftView və rightView-i dəstəkləyir. Bu, iOS proqramlarında giriş, axtarış, qeydiyyat və məlumat daxil etmə formaları üçün əsas elementdir.
Əsas məqamlar
UITextField — istifadəçi tərəfindən tək sətirli mətn daxil etmək üçün nəzərdə tutulmuş UIKit freymvork sinifidir. Sinif UIControl-dan miras alır ki, bu da target-action mexanizmi vasitəsilə daxiletmə hadisələrinə abunə olmağa imkan verir: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField çərçivə (borderStyle), boş sahədə placeholder mətni, təmizləmə düyməsi (clearButtonMode) göstərir və sol/sağ köməkçi view-lər ehtiva edə bilər. Sahə avtomatik olaraq becomeFirstResponder və resignFirstResponder vasitəsilə fokus qəbul edərkən/itirərkən klaviaturanı göstərir/gizlədir. Sahənin ölçüsü font və border style əsasında intrinsicContentSize ilə müəyyən edilir. Interface Builder-də (Storyboard/XIB) UITextField yaratmaq üçün Object Library istifadə olunur, proqramlı şəkildə — UITextField(frame: CGRect) initləşdiricisi vasitəsilə. Sinif müasir iOS arxitekturası ilə tam uyğundur: Combine publishers, SwiftUI-də UIViewRepresentable vasitəsilə @Published və formalar üçün Diffable Data Source.
UITextField keyboardType xüsusiyyəti vasitəsilə 12 klaviatura növünü dəstəkləyir. Hər bir növ müəyyən daxiletmə ssenarisi üçün simvol dəstini optimallaşdırır. UIKeyboardType.default — standart QWERTY klaviaturası. UIKeyboardType.numberPad — əlavə simvollar olmadan yalnız rəqəmlər (PIN-kodlar və telefon nömrələri üçün ideal). UIKeyboardType.emailAddress — əsas təbəqədə @ və nöqtə simvolu olan klaviatura. UIKeyboardType.URL — əsas təbəqədə .com, / və . olan klaviatura. UIKeyboardType.phonePad — telefon nömrələri daxil etmək üçün +, *, # ilə rəqəm klaviaturası. UIKeyboardType.decimalPad — qiymət daxil etmək üçün onluq nöqtəsi olan rəqəmlər. UIKeyboardType.webSearch — Go düyməsi və axtarış sorğuları üçün optimallaşdırma ilə klaviatura. UIKeyboardType.asciiCapable — Latın əlifbası üçün yalnız ASCII simvolları. Klaviatura becomeFirstResponder çağırıldıqda göstərilir və resignFirstResponder çağırıldıqda gizlənir. Klaviatura növü redaktə zamanı dinamik olaraq dəyişdirilə bilər.
| Növ | Ssenari | Xüsusiyyətlər |
|---|---|---|
| default | Ümumi mətn daxiletmə | Standart QWERTY |
| numberPad | PIN, kod | Yalnız 0-9 rəqəmləri |
| emailAddress | E-poçt | @ və . əsas təbəqədə |
| URL | Veb-ünvan | .com, /, . əsasda |
| phonePad | Telefon | Rəqəmlər, +, *, # |
| decimalPad | Qiymət, ədəd | Rəqəmlər + onluq nöqtə |
UITextFieldDelegate — mətn sahəsinin davranışını daxiletmənin müxtəlif mərhələlərində müəyyən edən protokoldur. Əsas metodlar: textFieldShouldBeginEditing(textField) — redaktəyə başlamağa icazə verən və ya qadağan edən Bool qaytarır; textFieldDidBeginEditing — klaviatura göründükdən sonra çağırılır; textFieldShouldEndEditing — redaktənin bitirilə biləcəyini yoxlayır (false olduqda sahə fokusu itirmir); textFieldDidEndEditing — klaviatura gizləndikdən sonra çağırılır; textFieldShouldChangeCharactersInRange — hər simvol daxil edildikdə çağırılır, daxilolmanı filtrləməyə imkan verir (yalnız bir simvola icazə verilir, false qaytarılarsa simvol əlavə edilməyəcək); textFieldShouldReturn — Return/Go/Next/Search basıldıqda çağırılır, növbəti sahəyə keçmək üçün istifadə olunur. Delegat Optional deyil: bütün metodların standart tətbiqi var, lakin xüsusi davranış üçün müvafiq metodu override etmək lazımdır.
shouldReturn metodu — forma sahələri arasında naviqasiya üçün standart nümunədir. Tətbiq: textFieldShouldReturn(textField) — hansı textField-in hadisəni çağırdığını yoxlayırıq və becomeFirstResponder() vasitəsilə fokusu növbəti sahəyə keçiririk. Əgər bu son sahədirsə — klaviaturanı gizlətmək üçün resignFirstResponder() çağırırıq. Sahələrə istinadları saxlamaq üçün IBOutlet collection və ya hər sahə üçün ayrıca IBOutlet istifadə edin.
isSecureTextEntry — UITextField-in xüsusiyyəti, true olduqda daxil edilən simvolları nöqtələrlə (•) əvəz edir və UIMenuController vasitəsilə mətnin kopyalanmasını bloklayır. Şifrə, PIN-kod, CVV sahələri üçün istifadə olunur. Secure rejim və adi mətn arasında keçid edərkən (show/hide password) textField.isSecureTextEntry.toggle() təyin edin. Əhəmiyyətli: isSecureTextEntry dəyişdirilərkən sahənin mətni sıfırlanır — onu əvvəlcədən qeyd edin. LeftView və RightView — daxiletmə sahəsinin içərisində solda və ya sağda göstərilən xüsusi UIView-lərdir. Tipik istifadə: leftView-də axtarış nişanı, rightView-də "Təmizlə" düyməsi. Konfiqurasiya: textField.leftViewMode = always (həmişə) və ya whileEditing (yalnız redaktə zamanı). Left/right view avtomatik olaraq mətn sahəsinin içərisində padding nəzərə alınmaqla yerləşdirilir. View-in ölçüsü bounds və ya Auto Layout ilə təyin edilir.
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
// Şifrə göstər/gizlə üçün xüsusi düymə
let showButton = UIButton(type: .system)
showButton.setTitle("Göstər", for: .normal)
showButton.addTarget(self, action: #selector(togglePasswordVisibility),
for: .touchUpInside)
passwordField.rightView = showButton
passwordField.rightViewMode = .always
}
@objc func togglePasswordVisibility() {
passwordField.isSecureTextEntry.toggle()
}
}
UITextInputTraits — UITextField üçün klaviaturanın vizual və davranış tənzimlənməsini müəyyən edən protokoldur. Əsas xüsusiyyətlər: autocorrectionType (.default, .no, .yes) — mətnin avtokorreksiyasını aktivləşdirir və ya söndürür; autocapitalizationType (.none, .words, .sentences, .allCharacters) — ilk simvol üçün avtomatik Caps Lock; spellCheckingType — orfoqrafiya yoxlanışı; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — klaviaturada Return düyməsinin mətni; enablesReturnKeyAutomatically — boş sahədə Return düyməsinin avtomatik bloklanması. Ad daxiletmə sahələri üçün autocapitalizationType = .words, e-poçt üçün — autocorrectionType = .no, URL üçün — keyboardType = .URL + autocapitalizationType = .none istifadə edin. Traits konfiqurasiyası sahənin initləşdirilməsindən sonra, göstərilməzdən əvvəl həyata keçirilir. Traits-in dəyişdirilməsi növbəti görünmədə klaviaturanı dinamik olaraq yeniləyir.
Return Key Type klaviaturada düymənin mətnini müəyyən edir: Next — növbəti sahəyə keç, Done — daxilolmanı bitir, Search — axtarışı başlat, Send — formanı göndər, Continue — doldurmağa davam et. shouldReturn delegat metodu ilə birlikdə, returnKeyType təbii UX yaratmağa imkan verir: istifadəçi növbəti sahəyə keçmək üçün Next, son sahədə göndərmək üçün Done düyməsini basır. Düymə mətnini fərdiləşdirmək üçün iOS 15+ də UIButtonConfiguration istifadə edin.
Placeholder UITextField — sahə boş olduqda boz rənglə göstərilən mətndir. Konfiqurasiya: textField.placeholder = "Enter email". Placeholder rəngini və şriftini fərdiləşdirmək üçün NSAttributedString ilə attributedPlaceholder istifadə edin. Daxiletmə maskası shouldChangeCharactersInRange delegat metodu vasitəsilə tətbiq edilir — telefon nömrəsi, tarix, kredit kartı, SNILS formatı dəstəklənir. Daxiletmə maskası göstərilməni və dəyəri ayırmağa imkan verir: istifadəçi formatlaşdırılmış mətn görür (məsələn, +7 (999) 999-99-99), modeldə isə "79999999999" saxlanılır. Tətbiq nümunəsi: maskanı əvəz üçün X simvolları olan sətir kimi saxlayırıq; hər daxiletmədə formatlaşdırılmış sətir yaradırıq və shouldChangeCharactersInRange-də false qaytarırıq, sahənin mətnini textField.text = formattedText vasitəsilə əvəz edirik. Rəqəmlər üçün NumberFormatter və onluq keyboardType istifadə edin.
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 {
// E-poçtda boşluqları blokla
if textField == emailField && string == " " {
return false
}
// Şifrə uzunluğu limiti
if textField == passwordField {
let newLength = (textField.text?.count ?? 0) +
string.count - range.length
return newLength <= 32
}
return true
}
}
UITextField ilə giriş formasının, e-poçt validasiyası və vizual əks-əlaqə ilə tam tətbiq nümunəsini nəzərdən keçirək. Forma iki sahədən ibarətdir: emailField (emailAddress klaviatura, no autocorrection) və passwordField (secureTextEntry). Validasiya shouldChangeCharactersInRange-də və əlavə olaraq Login düyməsi basıldıqda həyata keçirilir. Vizual əks-əlaqə üçün: səhv olduqda qırmızı çərçivə (layer.borderColor), uğurlu validasiyada — yaşıl. Redaktə başlayanda çərçivənin sıfırlanması textFieldDidBeginEditing-də.
E-poçt validasiyası "SELF MATCHES %@" formatı ilə NSPredicate və formatın əsas yoxlanışı üçün müntəzəm ifadə vasitəsilə həyata keçirilir. E-poçtun mövcudluğunun real yoxlanışı serverdə aparılmalıdır. Qabaqcıl validasiya üçün SwiftValidators kitabxanası və ya Combine publishers istifadə edin. Nümunə: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Sahənin çərçivəsi hamar keçid üçün animation block vasitəsilə yenilənir.
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 verilən suallar
shouldChangeCharactersInRange delegat metodundan istifadə edin. Mətnin yeni uzunluğunu existingText.count + newText.count - range.length kimi hesablayın və limit aşılıbsa false qaytarın. Alternativ: addTarget vasitəsilə editingChanged hadisəsinə abunə olun və mətni textField.text = String(text.prefix(maxLength)) vasitəsilə qısaldın.
Yoxlayın: isUserInteractionEnabled = true (standart), delegat shouldBeginEditing-də false qaytarmır. Sahə UIScrollView daxilindədirsə — delaysContentTouches-i söndürün. Sahə modal kontrollerdədirsə — onun toxunmaları bloklamadığını yoxlayın. SwiftUI UIViewRepresentable üçün sahənin DispatchQueue.main.async vasitəsilə düzgün firstResponder olduğunu yoxlayın.
UITapGestureRecognizer-i self.view və ya scrollView-ə view.endEditing(true) çağıran target-action ilə əlavə edin. Alternativ: konkret sahənin klaviaturasını gizlətmək üçün textField.resignFirstResponder(). UIViewController-də touchesBegan konfiqurasiya edin və ya avtomatik klaviatura idarəetməsi üçün IQKeyboardManager kitabxanasından istifadə edin. Düymələrin düzgün işləməsi üçün cancelsTouchesInView-i söndürməyi unutmayın.
Mətn rəngi: textField.textColor = UIColor.label. Şrift: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Placeholder rəngi: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).
Üç üsul: isEnabled = false (görünüşü dəyişir), isUserInteractionEnabled = false (vizual stili saxlayır) və ya delegatın textFieldShouldBeginEditing-də false qaytarın. Üçüncü üsul daha üstündür — vizual stili dəyişmədən daxilolmanı bloklayır. Yalnız oxumaq rejimində mətni proqramlı şəkildə təyin etmək üçün delegatdan istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun