UITextField — cos'è, configurazione del campo di input e principio di funzionamento

Autore: IT Sectr Pubblicato: 2026-07-06 Tempo di lettura: 8 min

UITextField è un componente standard di UIKit per l'inserimento di testo su una singola riga in iOS, che eredita da UIControl e supporta un'ampia gamma di modalità di tastiera. Secondo la documentazione di Apple Developer (2025), UITextField fornisce il delegato UITextFieldDelegate con i callback shouldBeginEditing, shouldChangeCharactersInRange e shouldReturn. A differenza di UITextView, UITextField limita l'input a una singola riga e supporta secureTextEntry, leftView e rightView per controlli personalizzati. Questo è l'elemento principale per moduli di autenticazione, ricerca, registrazione e inserimento dati nelle applicazioni iOS.

Punti chiave

  • UITextField — campo di input UIKit a riga singola con supporto delegato e tastiere personalizzate
  • UIKeyboardType — 12 tipi di tastiera: numberPad, emailAddress, URL, phonePad e altri
  • UITextFieldDelegate — gestione del ciclo di vita dell'input tramite callback shouldBegin/End/Change
  • Secure Text Entry — modalità di inserimento password con sostituzione dei caratteri con pallini tramite isSecureTextEntry
  • Left/Right View — icone e pulsanti personalizzati all'interno del campo di input per miglioramenti UX

Cos'è UITextField

UITextField è una classe del framework UIKit progettata per l'inserimento di testo su una singola riga da parte dell'utente. La classe eredita da UIControl, consentendo la sottoscrizione agli eventi di input tramite il meccanismo target-action: addTarget(self, action: Selector("textChanged:"), for: editingChanged). UITextField visualizza un bordo (borderStyle), testo placeholder quando il campo è vuoto, un pulsante di cancellazione (clearButtonMode) e può contenere viste ausiliarie sinistra/destra. Il campo mostra/nasconde automaticamente la tastiera quando guadagna/perde il focus tramite becomeFirstResponder e resignFirstResponder. La dimensione del campo è determinata da intrinsicContentSize in base al font e allo stile del bordo. Per creare un UITextField in Interface Builder (Storyboard/XIB), utilizza la Libreria Oggetti; programmaticamente, utilizza l'inizializzatore UITextField(frame: CGRect). La classe è completamente compatibile con l'architettura iOS moderna: Combine publishers, @Published in SwiftUI tramite UIViewRepresentable e Diffable Data Source per i moduli.

Tipi di tastiera UIKeyboardType

UITextField supporta 12 tipi di tastiera tramite la proprietà keyboardType. Ogni tipo ottimizza il set di caratteri per uno scenario di input specifico. UIKeyboardType.default — tastiera QWERTY standard. UIKeyboardType.numberPad — solo cifre senza simboli aggiuntivi (ideale per codici PIN e numeri di telefono). UIKeyboardType.emailAddress — tastiera con @ e punto sul livello principale. UIKeyboardType.URL — tastiera con .com, / e punto sul livello principale. UIKeyboardType.phonePad — tastierino numerico con +, *, # per l'inserimento di numeri di telefono. UIKeyboardType.decimalPad — cifre con punto decimale per l'inserimento di prezzi. UIKeyboardType.webSearch — tastiera con pulsante Go ottimizzata per query di ricerca. UIKeyboardType.asciiCapable — solo caratteri ASCII per testo latino. La tastiera appare quando si chiama becomeFirstResponder e si nasconde quando si chiama resignFirstResponder. Il tipo di tastiera può essere cambiato dinamicamente durante la modifica.

TipoScenarioCaratteristiche
defaultInserimento testo generaleQWERTY standard
numberPadPIN, codiceSolo cifre 0-9
emailAddressEmail@ e . sul livello principale
URLIndirizzo web.com, /, . sul principale
phonePadTelefonoCifre, +, *, #
decimalPadPrezzo, numeroCifre + punto decimale

Delegato UITextFieldDelegate e i suoi metodi

UITextFieldDelegate è un protocollo che definisce il comportamento del campo di testo in diverse fasi dell'input. Metodi principali: textFieldShouldBeginEditing(textField) — restituisce un Bool che permette o nega l'inizio della modifica; textFieldDidBeginEditing — chiamato dopo la comparsa della tastiera; textFieldShouldEndEditing — verifica se la modifica può essere completata (se false, il campo non perde il focus); textFieldDidEndEditing — chiamato dopo la scomparsa della tastiera; textFieldShouldChangeCharactersInRange — chiamato ad ogni inserimento di carattere, permette di filtrare l'input (solo un carattere consentito, se viene restituito false — il carattere non viene aggiunto); textFieldShouldReturn — chiamato quando si preme Return/Go/Next/Search, utilizzato per passare al campo successivo. Il delegato non è Optional: tutti i metodi hanno un'implementazione predefinita, ma per un comportamento personalizzato è necessario sovrascrivere il metodo corrispondente.

Gestione del focus tramite shouldReturn

Il metodo shouldReturn è il pattern standard per navigare tra i campi del modulo. Implementazione: textFieldShouldReturn(textField) — verifica quale textField ha attivato l'evento e sposta il focus sul campo successivo tramite becomeFirstResponder(). Se è l'ultimo campo, chiama resignFirstResponder() per nascondere la tastiera. Utilizza IBOutlet collection o IBOutlet separati per ogni campo per memorizzare i riferimenti ai campi.

Secure Text Entry e viste left/right personalizzate

isSecureTextEntry — una proprietà di UITextField che, quando true, sostituisce i caratteri inseriti con pallini (•) e blocca la copia del testo tramite UIMenuController. Utilizzato per campi password, codici PIN, CVV. Quando si passa dalla modalità sicura al testo normale (show/hide password), imposta textField.isSecureTextEntry.toggle(). Importante: quando si modifica isSecureTextEntry, il testo del campo viene reimpostato — salvalo in anticipo. LeftView e RightView sono UIView personalizzati visualizzati all'interno del campo di input a sinistra o a destra. Utilizzo tipico: un'icona di ricerca in leftView, un pulsante "Cancella" in rightView. Configurazione: textField.leftViewMode = always (sempre) o whileEditing (solo durante la modifica). Le viste left/right vengono posizionate automaticamente all'interno del campo di testo considerando il padding. La dimensione della vista viene impostata tramite bounds o 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

        // Pulsante personalizzato mostra/nascondi password
        let showButton = UIButton(type: .system)
        showButton.setTitle("Mostra", for: .normal)
        showButton.addTarget(self, action: #selector(togglePasswordVisibility),
                       for: .touchUpInside)
        passwordField.rightView = showButton
        passwordField.rightViewMode = .always
    }

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

Configurazione di UITextInputTraits

UITextInputTraits è un protocollo che definisce l'aspetto visivo e comportamentale della tastiera per UITextField. Proprietà principali: autocorrectionType (.default, .no, .yes) — attiva o disattiva la correzione automatica del testo; autocapitalizationType (.none, .words, .sentences, .allCharacters) — blocco automatico delle maiuscole per il primo carattere; spellCheckingType — controllo ortografico; returnKeyType (.done, .go, .next, .search, .send, .continue, .join, .route, .emergencyCall) — testo del pulsante Return sulla tastiera; enablesReturnKeyAutomatically — disabilitazione automatica del pulsante Return quando il campo è vuoto. Per i campi di inserimento del nome, utilizza autocapitalizationType = .words; per l'email, utilizza autocorrectionType = .no; per l'URL, utilizza keyboardType = .URL + autocapitalizationType = .none. Le traits vengono configurate dopo l'inizializzazione del campo prima della sua visualizzazione. La modifica dinamica delle traits aggiorna la tastiera alla sua prossima apparizione.

Return Key Type e navigazione nel modulo

Return Key Type definisce il testo del pulsante sulla tastiera: Next — passa al campo successivo, Done — completa l'inserimento, Search — avvia la ricerca, Send — invia il modulo, Continue — continua la compilazione. In combinazione con il metodo delegato shouldReturn, returnKeyType consente un UX naturale: l'utente compila i campi, preme Next per passare al successivo e Done per inviare sull'ultimo campo. Per la personalizzazione del testo del pulsante, utilizza UIButtonConfiguration in iOS 15+.

Placeholder, formattazione e maschera di input

Il placeholder di UITextField è il testo visualizzato in grigio quando il campo è vuoto. Configurazione: textField.placeholder = "Enter email". Per personalizzare il colore e il font del placeholder, utilizza attributedPlaceholder con NSAttributedString. La maschera di input viene implementata tramite il metodo delegato shouldChangeCharactersInRange — supporta i formati di numero di telefono, data, carta di credito e SNILS. La maschera di input consente di separare la visualizzazione dal valore: l'utente vede testo formattato (ad esempio, +7 (999) 999-99-99), mentre il modello memorizza "79999999999". Esempio di implementazione: memorizza la maschera come stringa con caratteri X per la sostituzione; ad ogni input, forma la stringa formattata e restituisci false in shouldChangeCharactersInRange, sostituendo il testo del campo tramite textField.text = formattedText. Per i numeri, utilizza NumberFormatter e il keyboardType decimal.

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 {
        // Blocca spazi nell'email
        if textField == emailField && string == " " {
            return false
        }
        // Limite lunghezza password
        if textField == passwordField {
            let newLength = (textField.text?.count ?? 0) +
                string.count - range.length
            return newLength <= 32
        }
        return true
    }
}

Esempi di codice: validazione e modulo

Vediamo un esempio completo di implementazione di un modulo di login con UITextField, validazione email e feedback visivo. Il modulo contiene due campi: emailField (tastiera emailAddress, nessuna autocorrezione) e passwordField (secureTextEntry). La validazione viene eseguita in shouldChangeCharactersInRange e inoltre quando si preme il pulsante Login. Per il feedback visivo: bordo rosso (layer.borderColor) in caso di errore, verde — in caso di validazione riuscita. Reimpostazione del bordo all'inizio della modifica in textFieldDidBeginEditing.

Validazione email con espressione regolare

La validazione email viene eseguita tramite NSPredicate con il formato "SELF MATCHES %@" e un'espressione regolare per il controllo di base del formato. La verifica effettiva dell'esistenza dell'email deve essere eseguita sul server. Per una validazione avanzata, utilizza la libreria SwiftValidators o Combine publishers. Esempio: NSPredicate(format: "SELF MATCHES [c] %@", emailRegex).evaluate(with: email). Il bordo del campo viene aggiornato tramite un blocco di animazione per una transizione fluida.

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

Domande frequenti

Come limitare il numero di caratteri in UITextField?

Utilizza il metodo delegato shouldChangeCharactersInRange. Calcola la nuova lunghezza del testo come existingText.count + newText.count - range.length e restituisci false se il limite viene superato. In alternativa: sottoscrivi l'evento editingChanged tramite addTarget e tronca il testo usando textField.text = String(text.prefix(maxLength)).

Perché UITextField non risponde al tocco?

Verifica: isUserInteractionEnabled = true (predefinito), il delegato non restituisce false in shouldBeginEditing. Se il campo si trova all'interno di un UIScrollView, disabilita delaysContentTouches. Se il campo si trova in un controller modale, verifica che non stia bloccando i tocchi. Per SwiftUI UIViewRepresentable, verifica che il campo diventi correttamente firstResponder tramite DispatchQueue.main.async.

Come nascondere la tastiera toccando fuori da UITextField?

Aggiungi un UITapGestureRecognizer su self.view o scrollView con target-action che chiama view.endEditing(true). Alternativa: textField.resignFirstResponder() per nascondere la tastiera di un campo specifico. Implementa touchesBegan in UIViewController o utilizza la libreria IQKeyboardManager per la gestione automatica della tastiera. Non dimenticare di disabilitare cancelsTouchesInView per il corretto funzionamento dei pulsanti.

Come cambiare il colore del testo e il font di UITextField?

Colore del testo: textField.textColor = UIColor.label. Font: textField.font = UIFont.systemFont(ofSize: 16, weight: .regular). Colore del placeholder: textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes: [.foregroundColor: UIColor.secondaryLabel]).

Come rendere UITextField in sola lettura?

Tre modi: isEnabled = false (modifica l'aspetto), isUserInteractionEnabled = false (preserva lo stile visivo) o restituisci false nel delegato textFieldShouldBeginEditing. Il terzo metodo è preferibile — blocca l'input senza modificare lo stile visivo. Per impostare il testo programmaticamente in modalità sola lettura, utilizza il delegato.

Riepilogo

  • UITextField — campo di input UIKit a riga singola che eredita da UIControl con gestione delegata
  • UIKeyboardType — 12 tipi di tastiera per diversi scenari: email, URL, numberPad, phonePad
  • UITextFieldDelegate — protocollo con metodi shouldBegin/End/Change/Return per la gestione dell'input
  • Secure Text Entry — modalità password tramite isSecureTextEntry con sostituzione dei caratteri con pallini
  • Left/Right View — elementi personalizzati all'interno del campo (icone, pulsanti) con modalità always/whileEditing
  • Return Key Type — configurazione del pulsante Return: Next, Done, Search, Send per la navigazione nel modulo
  • Validazione — tramite shouldChangeCharactersInRange con regex e feedback visivo attraverso il bordo
  • Il placeholder viene configurato tramite attributedPlaceholder con NSAttributedString per uno stile personalizzato

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche