First Responder: vad är det, syfte och inmatningsobjekt

Författare: IT Sectr Publicerad: 2026-07-09 Lästid: 9 min

First Responder — är ett UIResponder-objekt i iOS som först tar emot beröringshändelser, tangenttryckningar, skakgester och menykommandon. Vid varje tillfälle kan endast ett objekt i appen vara first responder. Tilldelning sker automatiskt (vid fokus av UITextField) eller programmatiskt via metoden becomeFirstResponder. Enligt Apple Developer Documentation (2026) kan ett objekt endast bli first responder om dess metod canBecomeFirstResponder returnerar true, vilket gör denna mekanism explicit och kontrollerbar.

Huvudpunkter

  • First Responder — huvudmottagare av inmatningshändelser, tilldelas automatiskt eller via becomeFirstResponder.
  • Endast ett objekt i appen kan vara first responder vid en given tidpunkt.
  • canBecomeFirstResponder måste returnera true för att objektet ska kunna bli first responder.
  • ResignFirstResponder tar bort first responder-status och döljer tangentbordet för UITextField.
  • UITextField och UITextView blir first responder när de får fokus från användaren.

Vad är First Responder

First Responder — är ett UIResponder-objekt som för närvarande tar emot inmatningshändelser i en iOS-app. Systemet dirigerar alla beröringshändelser, tangenttryckningar, rörelsehändelser (skakning av enheten) och åtgärdsmeddelanden (t.ex. anrop av snabbmeny) till just detta objekt.

Konceptet first responder är den första länken i Responder Chain. Om first responder inte bearbetar en mottagen händelse, överförs den automatiskt till nästa objekt i kedjan. Detta garanterar att händelsen inte går förlorad, utan successivt erbjuds till alla potentiella bearbetare i hierarkin.

Enligt Apple är first responder-status nära kopplad till UIResponder och dess metoder canBecomeFirstResponder och becomeFirstResponder. Som standard returnerar UIView endast true för vissa underklasser — UITextField, UITextView, UISearchBar. Andra vyer, inklusive vanlig UIView, returnerar false, vilket förhindrar oavsiktlig tilldelning.

Hur tilldelas First Responder

Tilldelning av first responder kan ske på två sätt: automatiskt, när användaren rör vid UITextField (systemet anropar internt becomeFirstResponder), eller programmatiskt, när utvecklaren uttryckligen anropar metoden becomeFirstResponder på ett UIResponder-objekt.

Före tilldelning kontrollerar iOS canBecomeFirstResponder. Om metoden returnerar false ignoreras anropet till becomeFirstResponder och objektet blir inte first responder. Detta är en skyddsmekanism som förhindrar tilldelning av objekt som inte är redo att bearbeta händelser — till exempel dolda eller inaktiverade gränssnittselement.

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

// Programmatisk tilldelning
textField.becomeFirstResponder()

// Kontrollera om first responder
if textField.isFirstResponder {
    print("TextField är nu first responder")
}

Vid tilldelning av en ny first responder anropar iOS automatiskt resignFirstResponder på den föregående. Detta garanterar att det alltid finns endast ett objekt i systemet med first responder-status. Om det nya objektet inte kan bli first responder (canBecomeFirstResponder = false), behåller det gamla sin status.

First Responder och tangentbordet

iOS-tangentbordet visas på skärmen tack vare first responder-mekanismen. När UITextField eller UITextView blir first responder visar systemet automatiskt tangentbordet som är kopplat till fältets aktuella keyboardType. Vid avgång av first responder döljs tangentbordet.

Detta beteende är en viktig UX-mekanism i iOS: användaren rör vid ett inmatningsfält — tangentbordet visas; trycker på Return eller rör vid ett annat fält — tangentbordet växlar eller döljs. Utvecklaren kan hantera detta via UIResponder-metoder, samt via inputView och inputAccessoryView för att ersätta standardtangentbordet med ett anpassat.

Input Accessory View — är en extra panel ovanför tangentbordet, som också är bunden till first responder. Till exempel en panel med knapparna Next, Previous, Done för navigering mellan inmatningsfält. Den visas och döljs tillsammans med tangentbordet, synkroniserat med first responder-status.

HändelseFirst responder-statusTangentbord
Beröring av UITextFieldBlir first responderVisas
Tryck på ReturnStannar eller avgårStannar eller döljs
Beröring av annat fältGår över till nytt fältVäxlar
Anrop av resignFirstResponderBorttagenDöljs
Döljande av appAvgår automatisktDöljs

First Responder avgång

ResignFirstResponder — är en UIResponder-metod som tar bort first responder-status från ett objekt. Efter anrop slutar objektet att ta emot inmatningshändelser och tangentbordet (om aktivt) döljs. Metoden returnerar Bool — true om avgången lyckades.

Utvecklare anropar ofta resignFirstResponder som svar på att Done-knappen trycks, beröring av ett tomt område på skärmen (view.endEditing) eller när skärmen lämnas. view.endEditing(true) — är ett bekvämt sätt att avgå för alla underordnade textfält samtidigt: det går igenom hela vyhierarkin och anropar resignFirstResponder på den aktuella first responder.

swift
// Avgång vid tryck på Done
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Avgång vid beröring av tomt område
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Avgång för alla formulärfält
func validateAndSubmit() {
    view.endEditing(true)
    // Logik för formulärinskickning
}

Det finns situationer där resignFirstResponder kan returnera false. Detta inträffar om objektet har åsidosatt metoden och uttryckligen förbjudit borttagning av status. Till exempel kan ett textfält under validering tillfälligt blockera avgång för att förhindra dataförlust. I sådana fall måste man vänta på att valideringen slutförs och först därefter tvinga avgång.

Kontroll och övervakning av First Responder

UIResponder tillhandahåller egenskapen isFirstResponder (skrivskyddad), som returnerar true om det givna objektet för närvarande är first responder. Detta är användbart för villkorlig logik — till exempel för att inte utföra en åtgärd om ett textfält är i fokus och användaren matar in data.

iOS tillhandahåller inget inbyggt API för att hämta den aktuella first responder i hela applikationen. Utvecklare skapar denna funktion genom att gå igenom vyhierarkin med UIResponder-metoden. Apples lösning rekommenderar en svag referens till first responder, som kan uppdateras via KVO eller delegater.

swift
// Tillägg för att hitta first responder
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

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

För spårning av ändringar av first responder kan man prenumerera på aviseringarna UIResponder.keyboardWillShowNotification och UIResponder.keyboardWillHideNotification — de indikerar indirekt att ett textobjekt har blivit eller slutat vara first responder. Det finns dock ingen direkt prenumeration på ändring av isFirstResponder; för detta används KVO eller anpassade delegater.

First Responder och anpassade vyer

Anpassade vyer kan bli first responder om de åsidosätter canBecomeFirstResponder och returnerar true. Detta är nödvändigt för komponenter som måste ta emot tangentbords- eller fysiska knapphändelser — till exempel anpassade spelkontroller eller kodredigerare baserade på UITextView.

När du skapar en anpassad first responder är det viktigt att komma ihåg tillgänglighet: VoiceOver och Switch Control förlitar sig på korrekt tilldelning av first responder för navigering. Om en anpassad vy blir first responder måste den korrekt implementera UIAccessibility-protokollet och informera hjälpmedelsteknik om sin status.

För anpassad inmatning (till exempel streckkodsläsare eller numeriskt tangentbord) åsidosätter du egenskapen inputView — returnera en anpassad UIView som visas istället för standardtangentbordet när denna vy är first responder. På liknande sätt lägger inputAccessoryView till en panel ovanför tangentbordet.

Vanliga frågor

Vad är First Responder i iOS?

First Responder — är ett UIResponder-objekt som för närvarande tar emot inmatningshändelser (beröringar, tangenter, accelerometer). Det tilldelas via becomeFirstResponder, måste returnera true från canBecomeFirstResponder. Endast ett objekt kan vara first responder i appen.

Hur gör man UITextField till first responder utan beröring?

Anropa textField.becomeFirstResponder() programmatiskt, till exempel i viewDidAppear. Se till att textField inte är dold, userInteractionEnabled = true och isEnabled = true. Om fältet finns i UITableView eller UICollectionView, se till att cellen är synlig på skärmen.

Hur döljer man tangentbordet genom att trycka utanför textfältet?

Lägg till en UITapGestureRecognizer på huvudvyn och anropa view.endEditing(true) i dess hanterare. Detta hittar automatiskt den aktuella first responder och anropar resignFirstResponder. Alternativt kan du åsidosätta touchesBegan i UIViewController med ett anrop till endEditing.

Varför returnerar becomeFirstResponder false?

becomeFirstResponder returnerar false om canBecomeFirstResponder returnerar false, vyn är dold, inte i fönsterhierarkin eller userInteractionEnabled = false. Kontrollera också om vyn har lagts till i fönstret — en vy som inte finns på skärmen fungerar inte med becomeFirstResponder.

Hur avgör man vilket objekt som är nuvarande first responder?

iOS tillhandahåller inget globalt API för detta. Använd rekursiv genomgång av vyhierarkin via en UIView-tillägg som kontrollerar isFirstResponder på varje undervy. Alternativ — lagra en svag referens till den senaste first responder i AppDelegate och uppdatera den via UITextField-delegater.

Sammanfattning

  • First Responder — det enda UIResponder-objekt som tar emot inmatningshändelser i iOS. Det är den första länken i Responder Chain.
  • becomeFirstResponder tilldelar objektet som first responder, men endast om canBecomeFirstResponder returnerar true — detta är systemets explicita skyddsmekanism.
  • resignFirstResponder tar bort first responder-status; för textfält döljer den automatiskt tangentbordet.
  • UITextField och UITextView blir first responder vid fokus och kan ändras programmatiskt via becomeFirstResponder på ett annat fält.
  • view.endEditing(true) — ett bekvämt sätt att avgå för alla underordnade responder-objekt i vyhierarkin.
  • Anpassade vyer kan bli first responder genom att åsidosätta canBecomeFirstResponder för specifika inmatningsscenarier.
  • Spårning av first responder utförs genom rekursiv genomgång av undervyer eller indirekt via tangentbordsaviseringar.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också