First Responder — is een UIResponder-object in iOS dat als eerste aanraakgebeurtenissen, toetsaanslagen, schudgebaren en menuopdrachten ontvangt. Op elk moment kan slechts één object in de app first responder zijn. Toewijzing gebeurt automatisch (bij focus van UITextField) of programmatisch via de methode becomeFirstResponder. Volgens Apple Developer Documentation (2026) kan een object alleen first responder worden als zijn methode canBecomeFirstResponder true retourneert, wat dit mechanisme expliciet en controleerbaar maakt.
Belangrijkste punten
First Responder — is een UIResponder-object dat momenteel invoergebeurtenissen ontvangt in een iOS-app. Het systeem stuurt alle aanraakgebeurtenissen, toetsaanslagen, bewegingsgebeurtenissen (schudden van het apparaat) en actieberichten (bijvoorbeeld het oproepen van een contextmenu) precies naar dit object.
Het concept van first responder is de eerste schakel in de Responder Chain. Als de first responder een ontvangen gebeurtenis niet verwerkt, wordt deze automatisch doorgegeven aan het volgende object in de keten. Dit garandeert dat de gebeurtenis niet verloren gaat, maar achtereenvolgens wordt aangeboden aan alle mogelijke verwerkers in de hiërarchie.
Volgens Apple is de first responder-status nauw verbonden met UIResponder en zijn methoden canBecomeFirstResponder en becomeFirstResponder. Standaard retourneert UIView alleen true voor bepaalde subklassen — UITextField, UITextView, UISearchBar. Andere weergaven, inclusief gewone UIView, retourneren false, wat voorkomt dat ze per ongeluk worden toegewezen.
Toewijzing van first responder kan op twee manieren gebeuren: automatisch, wanneer de gebruiker een UITextField aanraakt (het systeem roept intern becomeFirstResponder aan), of programmatisch, wanneer de ontwikkelaar expliciet de methode becomeFirstResponder aanroept op een UIResponder-object.
Voor toewijzing controleert iOS canBecomeFirstResponder. Als de methode false retourneert, wordt de aanroep van becomeFirstResponder genegeerd en wordt het object geen first responder. Dit is een beschermingsmechanisme dat voorkomt dat objecten worden toegewezen die niet klaar zijn om gebeurtenissen te verwerken — zoals verborgen of uitgeschakelde interface-elementen.
class CustomTextField: UITextField {
override var canBecomeFirstResponder: Bool {
return super.canBecomeFirstResponder
}
}
// Programmatische toewijzing
textField.becomeFirstResponder()
// Controleer of first responder
if textField.isFirstResponder {
print("TextField is nu first responder")
}
Bij toewijzing van een nieuwe first responder roept iOS automatisch resignFirstResponder aan op de vorige. Dit garandeert dat er altijd slechts één object in het systeem met de first responder-status is. Als het nieuwe object geen first responder kan worden (canBecomeFirstResponder = false), behoudt het oude zijn status.
Het iOS-toetsenbord verschijnt op het scherm dankzij het first responder-mechanisme. Wanneer UITextField of UITextView first responder wordt, geeft het systeem automatisch het toetsenbord weer dat is gekoppeld aan het huidige keyboardType van dat veld. Bij afstand doen van first responder wordt het toetsenbord verborgen.
Dit gedrag is een belangrijk UX-mechanisme in iOS: de gebruiker raakt een invoerveld aan — het toetsenbord verschijnt; drukt op Return of raakt een ander veld aan — het toetsenbord schakelt of wordt verborgen. De ontwikkelaar kan dit beheren via UIResponder-methoden, en ook via inputView en inputAccessoryView om het standaardtoetsenbord te vervangen door een aangepast toetsenbord.
Input Accessory View — is een extra paneel boven het toetsenbord, dat ook is gekoppeld aan de first responder. Bijvoorbeeld een paneel met knoppen Next, Previous, Done voor navigatie tussen invoervelden. Het wordt samen met het toetsenbord weergegeven en verborgen, gesynchroniseerd met de first responder-status.
| Gebeurtenis | First responder-status | Toetsenbord |
|---|---|---|
| Aanraken UITextField | Wordt first responder | Verschijnt |
| Indrukken Return | Blijft of doet afstand | Blijft of wordt verborgen |
| Aanraken ander veld | Gaat naar nieuw veld | Schakelt |
| Aanroepen resignFirstResponder | Verwijderd | Wordt verborgen |
| App verbergen | Doet automatisch afstand | Wordt verborgen |
ResignFirstResponder — is een UIResponder-methode die de first responder-status van een object verwijdert. Na aanroep stopt het object met het ontvangen van invoergebeurtenissen en wordt het toetsenbord (indien actief) verborgen. De methode retourneert Bool — true als het afstand doen succesvol was.
Ontwikkelaars roepen vaak resignFirstResponder aan als reactie op het indrukken van de Done-knop, het aanraken van een leeg gebied op het scherm (view.endEditing) of bij het verlaten van het scherm. view.endEditing(true) — is een handige manier om afstand te doen voor alle onderliggende tekstvelden tegelijk: het doorloopt de hele weergavehiërarchie en roept resignFirstResponder aan op de huidige first responder.
// Afstand doen bij indrukken Done
@objc func doneButtonTapped() {
textField.resignFirstResponder()
}
// Afstand doen bij aanraken leeg gebied
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
view.endEditing(true)
}
// Afstand doen voor alle formuliervelden
func validateAndSubmit() {
view.endEditing(true)
// Logica voor formulierverzending
}
Er zijn situaties waarin resignFirstResponder false kan retourneren. Dit gebeurt als het object de methode heeft overschreven en expliciet het verwijderen van de status heeft verboden. Een tekstveld dat bijvoorbeeld aan het valideren is, kan tijdelijk afstand doen blokkeren om gegevensverlies te voorkomen. In dergelijke gevallen moet u wachten tot de validatie is voltooid en pas dan geforceerd afstand doen.
UIResponder biedt de eigenschap isFirstResponder (alleen-lezen), die true retourneert als het gegeven object momenteel first responder is. Dit is handig voor voorwaardelijke logica — bijvoorbeeld om een actie niet uit te voeren als een tekstveld in focus is en de gebruiker gegevens invoert.
iOS biedt geen ingebouwde API om de huidige first responder op applicatieniveau te verkrijgen. Ontwikkelaars creëren deze mogelijkheid door de weergavehiërarchie te doorlopen met behulp van de UIResponder-methode. De Apple-oplossing raadt een zwakke verwijzing naar de first responder aan, die kan worden bijgewerkt via KVO of delegaten.
// Extensie om first responder te vinden
extension UIView {
var firstResponder: UIResponder? {
guard isFirstResponder else {
return subviews.compactMap { $0.firstResponder }.first
}
return self
}
}
// Gebruik
if let current = view.firstResponder {
print("Current first responder: \(current)")
}
Om wijzigingen in de first responder te volgen, kunt u zich abonneren op de meldingen UIResponder.keyboardWillShowNotification en UIResponder.keyboardWillHideNotification — ze geven indirect aan dat een tekstobject first responder is geworden of is gestopt. Er bestaat echter geen direct abonnement op wijziging van isFirstResponder; hiervoor wordt KVO of aangepaste delegaten gebruikt.
Aangepaste weergaven kunnen first responder worden door canBecomeFirstResponder te overschrijven en true te retourneren. Dit is nodig voor componenten die toetsenbord- of fysieke knopgebeurtenissen moeten ontvangen — zoals aangepaste gamecontrollers of code-editors op basis van UITextView.
Bij het maken van een aangepaste first responder is het belangrijk om aan toegankelijkheid te denken: VoiceOver en Switch Control vertrouwen op de juiste toewijzing van first responder voor navigatie. Als een aangepaste weergave first responder wordt, moet deze het UIAccessibility-protocol correct implementeren en ondersteunende technologieën op de hoogte stellen van zijn status.
Voor aangepaste invoer (bijvoorbeeld een barcodescanner of numeriek toetsenbord) overschrijft u de eigenschap inputView — retourneer een aangepaste UIView die wordt weergegeven in plaats van het standaardtoetsenbord wanneer deze weergave first responder is. Evenzo voegt inputAccessoryView een paneel boven het toetsenbord toe.
Veelgestelde vragen
First Responder — is een UIResponder-object dat momenteel invoergebeurtenissen ontvangt (aanrakingen, toetsen, accelerometer). Het wordt toegewezen via becomeFirstResponder en moet true retourneren uit canBecomeFirstResponder. Slechts één object kan first responder zijn in de app.
Roep textField.becomeFirstResponder() programmatisch aan, bijvoorbeeld in viewDidAppear. Zorg ervoor dat textField niet verborgen is, userInteractionEnabled = true en isEnabled = true. Als het veld zich in UITableView of UICollectionView bevindt, zorg er dan voor dat de cel zichtbaar is op het scherm.
Voeg een UITapGestureRecognizer toe aan de hoofdweergave en roep in de handler view.endEditing(true) aan. Dit vindt automatisch de huidige first responder en roept resignFirstResponder aan. U kunt ook touchesBegan in UIViewController overschrijven met een aanroep naar endEditing.
becomeFirstResponder retourneert false als canBecomeFirstResponder false retourneert, de weergave verborgen is, niet in de vensterhiërarchie zit of userInteractionEnabled = false is. Controleer ook of de weergave aan het venster is toegevoegd — een weergave die niet op het scherm staat, werkt niet met becomeFirstResponder.
iOS biedt geen globale API hiervoor. Gebruik een recursieve doorloop van de weergavehiërarchie via een UIView-extensie die isFirstResponder controleert bij elke subweergave. Alternatief — bewaar een zwakke verwijzing naar de laatste first responder in AppDelegate en werk deze bij via UITextField-delegaten.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook