UITextField — co to je, nastavení vstupního pole a princip fungování

Autor: IT Sectr Publikováno: 2026-07-06 Doba čtení: 8 min

UITextField — je standardní komponenta UIKit pro jednořádkový vstup textu v iOS, dědící z UIControl a podporující širokou škálu režimů klávesnice. Podle dokumentace Apple Developer (2025) poskytuje UITextField delegáta UITextFieldDelegate s callbacky shouldBeginEditing, shouldChangeCharactersInRange a shouldReturn. Na rozdíl od UITextView, UITextField omezuje vstup na jeden řádek a podporuje secureTextEntry, leftView a rightView pro vlastní ovládací prvky. Toto je hlavní prvek pro přihlašovací, vyhledávací, registrační formuláře a vstup dat v iOS aplikacích.

Hlavní body

  • UITextField — jednořádkové vstupní pole UIKit s podporou delegáta a vlastních klávesnic
  • UIKeyboardType — 12 typů klávesnice: numberPad, emailAddress, URL, phonePad a další
  • UITextFieldDelegate — správa životního cyklu vstupu pomocí callbacků shouldBegin/End/Change
  • Secure Text Entry — režim zadávání hesla s nahrazováním znaků tečkami pomocí isSecureTextEntry
  • Left/Right View — vlastní ikony a tlačítka uvnitř vstupního pole pro vylepšení UX

Co je UITextField

UITextField — je třída frameworku UIKit určená pro jednořádkový vstup textu uživatelem. Třída dědí z UIControl, což umožňuje přihlášení k odběru vstupních událostí pomocí mechanismu target-action: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField zobrazuje rámeček (borderStyle), zástupný text (placeholder) při prázdném poli, tlačítko vymazání (clearButtonMode) a může obsahovat levý/pravý pomocný pohled. Pole automaticky zobrazuje/skryje klávesnici při přijetí/ztrátě fokusu pomocí becomeFirstResponder a resignFirstResponder. Velikost pole je určena intrinsicContentSize na základě font a border style. Pro vytvoření UITextField v Interface Builder (Storyboard/XIB) se používá Object Library, programově — pomocí inicializátoru UITextField(frame: CGRect). Třída je plně kompatibilní s moderní architekturou iOS: Combine publishers, @Published ve SwiftUI přes UIViewRepresentable a Diffable Data Source pro formuláře.

Typy klávesnice UIKeyboardType

UITextField podporuje 12 typů klávesnice pomocí vlastnosti keyboardType. Každý typ optimalizuje sadu znaků pro konkrétní scénář vstupu. UIKeyboardType.default — standardní klávesnice QWERTY. UIKeyboardType.numberPad — pouze číslice bez dalších znaků (ideální pro PIN kódy a telefonní čísla). UIKeyboardType.emailAddress — klávesnice se znakem @ a tečkou na hlavní vrstvě. UIKeyboardType.URL — klávesnice s .com, / a . na hlavní vrstvě. UIKeyboardType.phonePad — numerická klávesnice s +, *, # pro zadávání telefonních čísel. UIKeyboardType.decimalPad — číslice s desetinnou tečkou pro zadávání cen. UIKeyboardType.webSearch — klávesnice s tlačítkem Go a optimalizací pro vyhledávací dotazy. UIKeyboardType.asciiCapable — pouze znaky ASCII pro latinku. Klávesnice se zobrazí při volání becomeFirstResponder a skryje při resignFirstResponder. Typ klávesnice lze dynamicky měnit během úprav.

TypScénářVlastnosti
defaultObecný vstup textuStandardní QWERTY
numberPadPIN, kódPouze číslice 0-9
emailAddressEmail@ a . na hlavní vrstvě
URLWebová adresa.com, /, . na hlavní
phonePadTelefonČíslice, +, *, #
decimalPadCena, čísloČíslice + desetinná tečka

Delegát UITextFieldDelegate a jeho metody

UITextFieldDelegate — je protokol definující chování textového pole v různých fázích vstupu. Hlavní metody: textFieldShouldBeginEditing(textField) — vrací Bool, povolující nebo zakazující zahájení úprav; textFieldDidBeginEditing — volá se po zobrazení klávesnice; textFieldShouldEndEditing — kontroluje, zda lze úpravy ukončit (při false pole neztrácí fokus); textFieldDidEndEditing — volá se po skrytí klávesnice; textFieldShouldChangeCharactersInRange — volá se při každém vstupu znaku, umožňuje filtrování vstupu (pouze jeden znak povolen, pokud vrátí false — znak se nepřidá); textFieldShouldReturn — volá se při stisknutí Return/Go/Next/Search, používá se pro přechod na další pole. Delegát není Optional: všechny metody mají výchozí implementaci, ale pro vlastní chování je třeba přepsat odpovídající metodu.

Správa fokusu pomocí shouldReturn

Metoda shouldReturn — standardní vzor pro navigaci mezi poli formuláře. Implementace: textFieldShouldReturn(textField) — zkontrolujeme, které textField spustilo událost a přesuneme fokus na další pole pomocí becomeFirstResponder(). Pokud je to poslední pole — zavoláme resignFirstResponder() pro skrytí klávesnice. Pro ukládání odkazů na pole použijte IBOutlet collection nebo samostatné IBOutlet pro každé pole.

Secure Text Entry a vlastní left/right view

isSecureTextEntry — vlastnost UITextField, která při true nahrazuje zadávané znaky tečkami (•) a blokuje kopírování textu přes UIMenuController. Používá se pro pole hesla, PIN, CVV. Při přepínání mezi zabezpečeným režimem a běžným textem (show/hide password) nastavte textField.isSecureTextEntry.toggle(). Důležité: při změně isSecureTextEntry se text pole resetuje — uložte jej předem. LeftView a RightView — jsou vlastní UIView zobrazené uvnitř vstupního pole vlevo nebo vpravo. Typické použití: ikona vyhledávání v leftView, tlačítko "Vymazat" v rightView. Nastavení: textField.leftViewMode = always (vždy) nebo whileEditing (pouze při úpravách). Left/right view se automaticky umisťují uvnitř textového pole s ohledem na padding. Velikost view se určuje pomocí bounds nebo 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

        // Vlastní tlačítko pro zobrazení/skrytí hesla
        let showButton = UIButton(type: .system)
        showButton.setTitle("Zobrazit", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

    @objc func togglePasswordVisibility() {
        passwordField.isSecureTextEntry.toggle()
    }
}

Nastavení UITextInputTraits

UITextInputTraits — je protokol, který definuje vizuální a behaviorální přizpůsobení klávesnice pro UITextField. Hlavní vlastnosti: autocorrectionType (.default, .no, .yes) — zapíná nebo vypíná automatickou opravu textu; autocapitalizationType (.none, .words, .sentences, .allCharacters) — automatický Caps Lock pro první znak; spellCheckingType — kontrola pravopisu; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — text tlačítka Return na klávesnici; enablesReturnKeyAutomatically — automatické blokování tlačítka Return při prázdném poli. Pro pole pro zadání jména použijte autocapitalizationType = .words, pro email — autocorrectionType = .no, pro URL — keyboardType = .URL + autocapitalizationType = .none. Nastavení traits se provádí po inicializaci pole před jeho zobrazením. Změna traits dynamicky aktualizuje klávesnici při příštím zobrazení.

Return Key Type a navigace ve formuláři

Return Key Type určuje text tlačítka na klávesnici: Next — přejít na další pole, Done — dokončit vstup, Search — spustit vyhledávání, Send — odeslat formulář, Continue — pokračovat ve vyplňování. V kombinaci s delegátní metodou shouldReturn umožňuje returnKeyType vytvořit přirozené UX: uživatel vyplňuje pole, mačká Next pro přechod na další a Done pro odeslání na posledním poli. Pro přizpůsobení textu tlačítka použijte UIButtonConfiguration v iOS 15+.

Placeholder, formátování a maska vstupu

Placeholder UITextField — je text zobrazený šedě, když je pole prázdné. Nastavení: textField.placeholder = "Enter email". Pro přizpůsobení barvy a fontu placeholderu použijte attributedPlaceholder s NSAttributedString. Maska vstupu je implementována pomocí delegátní metody shouldChangeCharactersInRange — podporován je formát telefonního čísla, data, kreditní karty, SNILS. Maska vstupu umožňuje oddělit zobrazení od hodnoty: uživatel vidí formátovaný text (např. +7 (999) 999-99-99), zatímco v modelu je uloženo "79999999999". Příklad implementace: masku ukládáme jako řetězec se symboly X pro nahrazení; při každém vstupu vytvoříme formátovaný řetězec a vrátíme false v shouldChangeCharactersInRange, nahrazujeme text pole pomocí textField.text = formattedText. Pro čísla použijte NumberFormatter a desetinný 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 {
        // Blokovat mezery v emailu
        if textField == emailField && string == " " {
            return false
        }
        // Limit délky hesla
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

Příklady kódu: validace a formulář

Podívejme se na úplný příklad implementace přihlašovacího formuláře s UITextField, validací emailu a vizuální zpětnou vazbou. Formulář obsahuje dvě pole: emailField (klávesnice emailAddress, bez automatické opravy) a passwordField (secureTextEntry). Validace se provádí v shouldChangeCharactersInRange a dodatečně při stisknutí tlačítka Login. Pro vizuální zpětnou vazbu: červený rámeček (layer.borderColor) při chybě, zelený — při úspěšné validaci. Reset rámečku při zahájení úprav v textFieldDidBeginEditing.

Validace emailu s regulárním výrazem

Validace emailu se provádí pomocí NSPredicate s formátem "SELF MATCHES %@" a regulárním výrazem pro základní kontrolu formátu. Skutečná kontrola existence emailu by měla být provedena na serveru. Pro pokročilou validaci použijte knihovnu SwiftValidators nebo Combine publishers. Příklad: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Rámeček pole se aktualizuje pomocí animation block pro plynulý přechod.

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

Často kladené otázky

Jak omezit počet znaků v UITextField?

Použijte delegátní metodu shouldChangeCharactersInRange. Vypočítejte novou délku textu jako existingText.count + newText.count - range.length a vraťte false, pokud je limit překročen. Alternativně: přihlaste se k odběru události editingChanged přes addTarget a zkraťte text pomocí textField.text = String(text.prefix(maxLength)).

Proč UITextField nereaguje na dotyk?

Zkontrolujte: isUserInteractionEnabled = true (výchozí), delegát nevrací false v shouldBeginEditing. Pokud je pole uvnitř UIScrollView — vypněte delaysContentTouches. Pokud je pole v modálním řadiči — zkontrolujte, že neblokuje dotyky. Pro SwiftUI UIViewRepresentable zkontrolujte, že se pole správně stává firstResponder přes DispatchQueue.main.async.

Jak skrýt klávesnici dotykem mimo UITextField?

Přidejte UITapGestureRecognizer na self.view nebo scrollView s target-action volajícím view.endEditing(true). Alternativa: textField.resignFirstResponder() pro skrytí klávesnice konkrétního pole. Nakonfigurujte touchesBegan v UIViewController nebo použijte knihovnu IQKeyboardManager pro automatickou správu klávesnice. Nezapomeňte vypnout cancelsTouchesInView pro správnou funkci tlačítek.

Jak změnit barvu textu a písmo UITextField?

Barva textu: textField.textColor = UIColor.label. Písmo: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Barva placeholderu: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

Jak udělat UITextField pouze pro čtení?

Tři způsoby: isEnabled = false (mění vzhled), isUserInteractionEnabled = false (zachovává vizuální styl) nebo vraťte false v textFieldShouldBeginEditing delegáta. Třetí způsob je preferovaný — blokuje vstup bez změny vizuálního stylu. Pro programové nastavení textu v režimu pouze pro čtení použijte delegáta.

Shrnutí

  • UITextField — jednořádkové vstupní pole UIKit s děděním z UIControl a správou přes delegáta
  • UIKeyboardType — 12 typů klávesnice pro různé scénáře: email, URL, numberPad, phonePad
  • UITextFieldDelegate — protokol s metodami shouldBegin/End/Change/Return pro správu vstupu
  • Secure Text Entry — režim hesla přes isSecureTextEntry s nahrazováním znaků tečkami
  • Left/Right View — vlastní prvky uvnitř pole (ikony, tlačítka) s režimy always/whileEditing
  • Return Key Type — nastavení tlačítka Return: Next, Done, Search, Send pro navigaci formulářem
  • Validace — přes shouldChangeCharactersInRange s regex a vizuální zpětnou vazbou přes rámeček
  • Placeholder se nastavuje přes attributedPlaceholder s NSAttributedString pro vlastní styl

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také