First Responder: cos'è, scopo e oggetto di input

Autore: IT Sectr Pubblicato: 2026-07-09 Tempo di lettura: 9 min

First Responder è l'oggetto UIResponder in iOS che riceve per primo gli eventi tattili, le pressioni dei tasti, i gesti di scossa e i comandi del menu. In ogni momento, solo un oggetto nell'applicazione può essere first responder. L'assegnazione avviene automaticamente (quando un UITextField ottiene il focus) o tramite programmazione con il metodo becomeFirstResponder. Secondo la Documentazione per Sviluppatori Apple (2026), un oggetto può diventare first responder solo se il suo metodo canBecomeFirstResponder restituisce true, rendendo questo meccanismo esplicito e controllabile.

Punti chiave

  • First Responder è il principale ricevitore degli eventi di input, assegnato automaticamente o tramite becomeFirstResponder.
  • Un solo oggetto nell'applicazione può essere first responder in un dato momento.
  • canBecomeFirstResponder deve restituire true perché un oggetto possa diventare first responder.
  • ResignFirstResponder rimuove lo stato di first responder e nasconde la tastiera per UITextField.
  • UITextField e UITextView diventano first responder quando ricevono il focus dall'utente.

Cos'è First Responder

First Responder è l'oggetto UIResponder che attualmente riceve gli eventi di input in un'applicazione iOS. Il sistema indirizza tutti gli eventi tattili, le pressioni dei tasti, gli eventi di movimento (scuotimento del dispositivo) e i messaggi di azione (ad esempio, l'invocazione di un menu contestuale) a questo oggetto.

Il concetto di first responder è il primo anello della Catena dei Responder (Responder Chain). Se il first responder non gestisce un evento ricevuto, questo viene automaticamente passato all'oggetto successivo nella catena. Ciò garantisce che un evento non vada perso ma venga offerto sequenzialmente a tutti i potenziali gestori nella gerarchia.

Secondo Apple, lo stato di first responder è strettamente legato a UIResponder e ai suoi metodi canBecomeFirstResponder e becomeFirstResponder. Per impostazione predefinita, UIView restituisce true solo per determinate sottoclassi — UITextField, UITextView, UISearchBar. Altre viste, inclusa una semplice UIView, restituiscono false, impedendo un'assegnazione accidentale.

Come viene assegnato First Responder

L'assegnazione del first responder può avvenire in due modi: automaticamente, quando l'utente tocca un UITextField (il sistema chiama internamente becomeFirstResponder), o tramite programmazione, quando lo sviluppatore chiama esplicitamente il metodo becomeFirstResponder su qualsiasi oggetto UIResponder.

Prima dell'assegnazione, iOS verifica canBecomeFirstResponder. Se il metodo restituisce false, la chiamata a becomeFirstResponder viene ignorata e l'oggetto non diventa first responder. Questo è un meccanismo di protezione che impedisce l'assegnazione di oggetti non pronti a gestire eventi — ad esempio, elementi dell'interfaccia nascosti o disabilitati.

swift
class CustomTextField: UITextField {
    override var canBecomeFirstResponder: Bool {
        return super.canBecomeFirstResponder
    }
}

// Assegnazione programmatica
textField.becomeFirstResponder()

// Verificare se è first responder
if textField.isFirstResponder {
    print("TextField ora è first responder")
}

Quando viene assegnato un nuovo first responder, iOS chiama automaticamente resignFirstResponder sul precedente. Ciò garantisce che ci sia sempre un solo oggetto con stato di first responder nel sistema. Se il nuovo oggetto non può diventare first responder (canBecomeFirstResponder = false), il vecchio mantiene il suo stato.

First Responder e la tastiera

La tastiera iOS appare sullo schermo proprio grazie al meccanismo di first responder. Quando un UITextField o UITextView diventa first responder, il sistema mostra automaticamente la tastiera associata al keyboardType corrente di quel campo. Quando il first responder resign, la tastiera si nasconde.

Questo comportamento è un meccanismo UX chiave in iOS: l'utente tocca un campo di input — la tastiera appare; preme Invio o tocca un altro campo — la tastiera cambia o si nasconde. Lo sviluppatore può controllarlo tramite i metodi UIResponder, nonché tramite inputView e inputAccessoryView per sostituire la tastiera standard con una personalizzata.

Input Accessory View è un pannello aggiuntivo sopra la tastiera che è anch'esso legato al first responder. Ad esempio, un pannello con i pulsanti Successivo, Precedente, Fine per navigare tra i campi di input. Appare e si nasconde insieme alla tastiera, sincronizzandosi con lo stato di first responder.

EventoStato first responderTastiera
Toccare UITextFieldDiventa first responderAppare
Premere InvioRimane o resignRimane o si nasconde
Toccare un altro campoPassa al nuovo campoCambia
Chiamare resignFirstResponderRimossoSi nasconde
App in backgroundResign automaticamenteSi nasconde

Resign First Responder

ResignFirstResponder è un metodo UIResponder che rimuove lo stato di first responder da un oggetto. Dopo la chiamata, l'oggetto smette di ricevere eventi di input e la tastiera (se era attiva) si nasconde. Il metodo restituisce un Bool — true se il resign è riuscito.

Gli sviluppatori chiamano spesso resignFirstResponder in risposta alla pressione del pulsante Fine, al tocco di un'area vuota dello schermo (view.endEditing) o quando si esce dallo schermo. view.endEditing(true) è un modo comodo per resign per tutti i campi di testo figli contemporaneamente: attraversa l'intera gerarchia delle viste e chiama resignFirstResponder sul first responder corrente.

swift
// Resign sul pulsante Fine
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Resign sul tocco area vuota
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Resign per tutti i campi del modulo
func validateAndSubmit() {
    view.endEditing(true)
    // Logica di invio del modulo
}

Esistono situazioni in cui resignFirstResponder può restituire false. Ciò accade se l'oggetto ha sovrascritto il metodo e ha esplicitamente impedito la rimozione dello stato. Ad esempio, un campo di testo in fase di validazione può bloccare temporaneamente il resign per evitare la perdita di dati. In tali casi, attendere il completamento della validazione e solo allora resign forzatamente.

Verifica e monitoraggio di First Responder

UIResponder fornisce la proprietà isFirstResponder (sola lettura), che restituisce true se l'oggetto specificato è attualmente il first responder. Ciò è utile per la logica condizionale — ad esempio, per evitare di eseguire un'azione se un campo di testo è focalizzato e l'utente sta inserendo dati.

iOS non fornisce un'API integrata per ottenere il first responder corrente a livello di intera applicazione. Gli sviluppatori ottengono questo risultato attraversando la gerarchia delle viste utilizzando il metodo UIResponder. Apple raccomanda un riferimento debole (weak reference) al first responder, che può essere aggiornato tramite KVO o delegati.

swift
// Estensione per trovare first responder
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

// Utilizzo
if let current = view.firstResponder {
    print("Current first responder: \(current)")
}

Per il tracciamento dei cambiamenti del first responder, è possibile sottoscriversi a UIResponder.keyboardWillShowNotification e UIResponder.keyboardWillHideNotification — indicano indirettamente che un oggetto di testo è diventato o ha smesso di essere first responder. Tuttavia, non esiste una sottoscrizione diretta per i cambiamenti di isFirstResponder; vengono utilizzati KVO o delegati personalizzati.

First Responder e viste personalizzate

Le viste personalizzate possono diventare first responder se sovrascrivono canBecomeFirstResponder e restituiscono true. Ciò è necessario per i componenti che devono ricevere eventi della tastiera o di pulsanti fisici — ad esempio, controller di gioco personalizzati o editor di codice basati su UITextView.

Quando si crea un first responder personalizzato, è importante tenere conto dell'accessibilità: VoiceOver e Switch Control si basano sulla corretta assegnazione del first responder per la navigazione. Se una vista personalizzata diventa first responder, deve implementare correttamente il protocollo UIAccessibility e segnalare il suo stato alle tecnologie assistive.

Per input personalizzato (ad esempio, uno scanner di codici a barre o un tastierino numerico), sovrascrivere la proprietà inputView — restituire una UIView personalizzata che verrà visualizzata al posto della tastiera standard quando questa vista è first responder. Analogamente, inputAccessoryView aggiunge un pannello sopra la tastiera.

Domande frequenti

Cos'è First Responder in iOS?

First Responder è l'oggetto UIResponder che attualmente riceve gli eventi di input (tocco, tasti, accelerometro). Viene assegnato tramite becomeFirstResponder e deve restituire true da canBecomeFirstResponder. Solo un oggetto può essere first responder in un'applicazione.

Come rendere UITextField first responder senza toccarlo?

Chiamare textField.becomeFirstResponder() tramite programmazione, ad esempio, in viewDidAppear. Assicurarsi che textField non sia nascosto, userInteractionEnabled = true e isEnabled = true. Se il campo si trova all'interno di un UITableView o UICollectionView, assicurarsi che la cella sia visibile sullo schermo.

Come nascondere la tastiera toccando fuori dal campo di testo?

Aggiungere un UITapGestureRecognizer alla vista principale e chiamare view.endEditing(true) nel suo gestore. Questo troverà automaticamente il first responder corrente e chiamerà resignFirstResponder. In alternativa, sovrascrivere touchesBegan in UIViewController con una chiamata a endEditing.

Perché becomeFirstResponder restituisce false?

becomeFirstResponder restituisce false se canBecomeFirstResponder restituisce false, la vista è nascosta, non è nella gerarchia della finestra o userInteractionEnabled = false. Verificare anche che la vista sia aggiunta alla finestra — una vista non visualizzata sullo schermo non risponderà a becomeFirstResponder.

Come determinare quale oggetto è attualmente first responder?

iOS non fornisce un'API globale per questo. Utilizzare un attraversamento ricorsivo della gerarchia delle viste tramite un'estensione UIView che verifica isFirstResponder su ogni sotto-vista. Un'alternativa è memorizzare un riferimento debole all'ultimo first responder in AppDelegate e aggiornarlo tramite i delegati UITextField.

Riepilogo

  • First Responder è l'unico oggetto UIResponder che riceve eventi di input in iOS. È il primo anello della Catena dei Responder.
  • becomeFirstResponder assegna l'oggetto come first responder, ma solo se canBecomeFirstResponder restituisce true — questo è un esplicito meccanismo di protezione del sistema.
  • resignFirstResponder rimuove lo stato di first responder; per i campi di testo, questo nasconde automaticamente la tastiera.
  • UITextField e UITextView diventano first responder al focus e possono essere cambiati tramite programmazione con becomeFirstResponder su un altro campo.
  • view.endEditing(true) è un modo comodo per resign per tutti gli oggetti responder figli nella gerarchia delle viste.
  • Le viste personalizzate possono diventare first responder sovrascrivendo canBecomeFirstResponder per scenari di input specifici.
  • Il tracciamento del first responder viene implementato tramite attraversamento ricorsivo delle sotto-viste o indirettamente tramite notifiche della tastiera.

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