UITextField — шта је, подешавање поља за унос и принцип рада

Аутор: IT Sectr Објављено: 2026-07-06 Време читања: 8 мин

UITextField — је стандардна UIKit компонента за једноредни унос текста у iOS-у, која наслеђује UIControl и подржава широк спектар тастатурних режима. Према Apple Developer (2025) документацији, UITextField пружа делегата UITextFieldDelegate са callback-овима shouldBeginEditing, shouldChangeCharactersInRange и shouldReturn. За разлику од UITextView, UITextField ограничава унос на један ред и подржава secureTextEntry, leftView и rightView за прилагођене контроле. Ово је основни елемент за форме за пријаву, претрагу, регистрацију и унос података у iOS апликацијама.

Главно

  • UITextField — једноредно поље за унос UIKit-а са подршком за делегата и прилагођене тастатуре
  • UIKeyboardType — 12 типова тастатуре: numberPad, emailAddress, URL, phonePad и други
  • UITextFieldDelegate — управљање животним циклусом уноса кроз shouldBegin/End/Change callback-ове
  • 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: све методе имају подразумевану имплементацију, али за прилагођено понашање потребно је прегазити одговарајућу методу.

Управљање фокусом кроз shouldReturn

Метода shouldReturn — стандардни образац за навигацију између поља форме. Имплементација: textFieldShouldReturn(textField) — проверавамо који textField је изазвао догађај и пребацујемо фокус на следеће поље кроз becomeFirstResponder(). Ако је ово последње поље — позивамо resignFirstResponder() за сакривање тастатуре. За чување референци на поља користите IBOutlet collection или засебне IBOutlet за свако поље.

Secure Text Entry и прилагођени left/right view

isSecureTextEntry — својство UITextField-а које при true замењује унете знакове тачкицама (•) и блокира копирање текста кроз UIMenuController. Користи се за поља лозинке, PIN-кода, CVV-а. При пребацивању између secure режима и обичног текста (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 — подржан је формат броја телефона, датума, кредитне картице, СНИЛС-а. Маска за унос омогућава раздвајање приказа и вредности: корисник види форматирани текст (нпр. +7 (999) 999-99-99), а у моделу се чува "79999999999". Пример имплементације: чувамо маску као низ знакова са X симболима за замену; при сваком уносу формирамо форматирани низ и враћамо false у shouldChangeCharactersInRange, замењујући текст поља кроз textField.text = formattedText. За бројеве користите NumberFormatter и децимални 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 типова тастатуре за различите сценарије: email, 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође