UITextField — какво е, настройка на полето за въвеждане и принцип на работа

Автор: IT Sectr Публикувано: 2026-07-06 Време за четене: 8 мин

UITextField — е стандартен компонент на UIKit за едноредово въвеждане на текст в iOS, наследяващ UIControl и поддържащ широк спектър от клавиатурни режими. Според документацията на Apple Developer (2025), UITextField предоставя делегат UITextFieldDelegate с колбекове shouldBeginEditing, shouldChangeCharactersInRange и shouldReturn. За разлика от UITextView, UITextField ограничава въвеждането до един ред и поддържа secureTextEntry, leftView и rightView за персонализирани контроли. Това е основният елемент за формуляри за вход, търсене, регистрация и въвеждане на данни в iOS приложения.

Основни точки

  • UITextField — едноредово поле за въвеждане на текст в UIKit с поддръжка на делегат и персонализирани клавиатури
  • UIKeyboardType — 12 типа клавиатура: numberPad, emailAddress, URL, phonePad и други
  • UITextFieldDelegate — управление на жизнения цикъл на въвеждане чрез колбекове shouldBegin/End/Change
  • Secure Text Entry — режим на въвеждане на парола с заместване на символи с точки чрез isSecureTextEntry
  • Left/Right View — персонализирани икони и бутони вътре в полето за въвеждане за UX подобрения

Какво е UITextField

UITextField — е клас на UIKit рамката, предназначен за едноредово въвеждане на текст от потребителя. Класът наследява UIControl, което позволява абониране за събития на въвеждане чрез target-action механизма: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField показва рамка (borderStyle), placeholder текст при празно поле, бутон за изчистване (clearButtonMode) и може да съдържа ляв/десен помощен view. Полето автоматично показва/скрива клавиатурата при получаване/загуба на фокус чрез becomeFirstResponder и resignFirstResponder. Размерът на полето се определя от intrinsicContentSize на базата на font и border style. За създаване на UITextField в Interface Builder (Storyboard/XIB) се използва Object Library, програмно — чрез инициализатора UITextField(frame: CGRect). Класът е напълно съвместим с модерната iOS архитектура: Combine publishers, @Published в SwiftUI чрез UIViewRepresentable и Diffable Data Source за формуляри.

Типове клавиатура UIKeyboardType

UITextField поддържа 12 типа клавиатура чрез свойството 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
numberPadPIN, кодСамо цифри 0-9
emailAddressИмейл@ и . на основния слой
URLУеб адрес.com, /, . на основния
phonePadТелефонЦифри, +, *, #
decimalPadЦена, числоЦифри + десетична точка

Делегат UITextFieldDelegate и неговите методи

UITextFieldDelegate — е протокол, който определя поведението на текстовото поле на различни етапи на въвеждане. Основни методи: textFieldShouldBeginEditing(textField) — връща Bool, разрешаващ или забраняващ започването на редактиране; textFieldDidBeginEditing — извиква се след появата на клавиатурата; textFieldShouldEndEditing — проверява дали редактирането може да приключи (при false полето не губи фокус); textFieldDidEndEditing — извиква се след скриването на клавиатурата; textFieldShouldChangeCharactersInRange — извиква се при всяко въвеждане на символ, позволява филтриране на въвеждането (само един символ е разрешен, ако върне false — символът няма да се добави); textFieldShouldReturn — извиква се при натискане на Return/Go/Next/Search, използва се за преминаване към следващото поле. Делегатът не е Optional: всички методи имат имплементация по подразбиране, но за персонализирано поведение трябва да се override съответния метод.

Управление на фокуса чрез shouldReturn

Методът shouldReturn — стандартен модел за навигация между полетата на формуляра. Имплементация: textFieldShouldReturn(textField) — проверяваме кой textField е предизвикал събитието и преместваме фокуса към следващото поле чрез becomeFirstResponder(). Ако това е последното поле — извикваме resignFirstResponder() за скриване на клавиатурата. За съхранение на референции към полета използвайте IBOutlet collection или отделни IBOutlet за всяко поле.

Secure Text Entry и персонализирани left/right view

isSecureTextEntry — свойство на UITextField, което при true замества въведените символи с точки (•) и блокира копирането на текст чрез UIMenuController. Използва се за полета за парола, PIN, CVV. При превключване между защитен режим и обикновен текст (show/hide password) задайте textField.isSecureTextEntry.toggle(). Важно: при промяна на isSecureTextEntry текстът на полето се нулира — запазете го предварително. LeftView и RightView — са персонализирани UIView, показвани вътре в полето за въвеждане отляво или отдясно. Типично използване: икона за търсене в leftView, бутон "Изчисти" в rightView. Настройка: textField.leftViewMode = always (винаги) или whileEditing (само при редактиране). Left/right view се позиционират автоматично вътре в текстовото поле, като се взема предвид padding. Размерът на view се определя чрез bounds или Auto Layout.

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

        // Персонализиран бутон за показване/скриване на парола
        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

UITextInputTraits — е протокол, който определя визуалното и поведенческо настрояване на клавиатурата за UITextField. Основни свойства: autocorrectionType (.default, .no, .yes) — включва или изключва автоматичното коригиране на текст; autocapitalizationType (.none, .words, .sentences, .allCharacters) — автоматичен Caps Lock за първия символ; 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 и навигация във формуляра

Return Key Type определя текста на бутона на клавиатурата: Next — премини към следващото поле, Done — завърши въвеждането, Search — стартирай търсене, Send — изпрати формуляра, Continue — продължи попълването. В комбинация с делегатния метод shouldReturn, returnKeyType позволява създаването на естествен UX: потребителят попълва полета, натискайки Next за преминаване към следващото и Done за изпращане на последното поле. За персонализиране на текста на бутона използвайте UIButtonConfiguration в iOS 15+.

Placeholder, форматиране и маска за въвеждане

Placeholder UITextField — е текстът, показван в сиво, когато полето е празно. Настройка: textField.placeholder = "Enter email". За персонализиране на цвета и шрифта на placeholder използвайте attributedPlaceholder с NSAttributedString. Маска за въвеждане се имплементира чрез делегатния метод shouldChangeCharactersInRange — поддържа се формат на телефонен номер, дата, кредитна карта, SNILS. Маската за въвеждане позволява разделяне на показването и стойността: потребителят вижда форматиран текст (напр. +7 (999) 999-99-99), а в модела се съхранява "79999999999". Пример за имплементация: съхраняваме маската като низ със символи X за замяна; при всяко въвеждане създаваме форматиран низ и връщаме false в shouldChangeCharactersInRange, заменяйки текста на полето чрез textField.text = formattedText. За числа използвайте NumberFormatter и decimal keyboardType.

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 {
        // Блокиране на интервали в имейл
        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.

Валидация на имейл с регулярен израз

Валидация на имейл се извършва чрез NSPredicate с формат "SELF MATCHES %@" и регулярен израз за основна проверка на формата. Реалната проверка за съществуване на имейл трябва да се извърши на сървъра. За разширена валидация използвайте библиотеката SwiftValidators или Combine publishers. Пример: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Рамката на полето се актуализира чрез animation block за плавен преход.

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

Често задавани въпроси

Как да огранича броя на символите в UITextField?

Използвайте делегатния метод shouldChangeCharactersInRange. Изчислете новата дължина на текста като existingText.count + newText.count - range.length и върнете false, ако лимитът е надвишен. Алтернативно: абонирайте се за събитието editingChanged чрез addTarget и отрежете текста чрез textField.text = String(text.prefix(maxLength)).

Защо UITextField не реагира на докосване?

Проверете: isUserInteractionEnabled = true (по подразбиране), делегатът не връща false в shouldBeginEditing. Ако полето е вътре в UIScrollView — изключете delaysContentTouches. Ако полето е в модален контролер — проверете дали не блокира докосванията. За SwiftUI UIViewRepresentable проверете дали полето правилно става firstResponder чрез DispatchQueue.main.async.

Как да скрия клавиатурата чрез докосване извън UITextField?

Добавете UITapGestureRecognizer към self.view или scrollView с target-action, който извиква view.endEditing(true). Алтернатива: textField.resignFirstResponder() за скриване на клавиатурата на конкретно поле. Настройте touchesBegan в UIViewController или използвайте библиотеката IQKeyboardManager за автоматично управление на клавиатурата. Не забравяйте да изключите cancelsTouchesInView за правилната работа на бутоните.

Как да променя цвета на текста и шрифта на UITextField?

Цвят на текста: textField.textColor = UIColor.label. Шрифт: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Цвят на placeholder: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

Как да направя UITextField само за четене?

Три начина: isEnabled = false (променя външния вид), isUserInteractionEnabled = false (запазва визуалния стил) или върнете false в textFieldShouldBeginEditing на делегата. Третият начин е за предпочитане — блокира въвеждането без промяна на визуалния стил. За програмно задаване на текст в режим само за четене използвайте делегата.

Обобщение

  • UITextField — едноредово поле за въвеждане на текст в UIKit с наследяване на UIControl и управление чрез делегат
  • UIKeyboardType — 12 типа клавиатура за различни сценарии: имейл, URL, numberPad, phonePad
  • UITextFieldDelegate — протокол с методи shouldBegin/End/Change/Return за управление на въвеждане
  • Secure Text Entry — режим на парола чрез isSecureTextEntry със заместване на символи с точки
  • Left/Right View — персонализирани елементи вътре в полето (икони, бутони) с режими always/whileEditing
  • Return Key Type — настройка на бутона Return: Next, Done, Search, Send за навигация във формуляра
  • Валидация — чрез shouldChangeCharactersInRange с regex и визуална обратна връзка чрез рамка
  • Placeholder се настройва чрез attributedPlaceholder с NSAttributedString за персонализиран стил

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също