First Responder: mi ez, célja és beviteli objektum

Szerző: IT Sectr Megjelenés: 2026-07-09 Olvasási idő: 9 perc

First Responder — egy UIResponder objektum iOS-ben, amely elsőként kapja meg az érintési eseményeket, billentyűlenyomásokat, rázási gesztusokat és menüparancsokat. Minden pillanatban csak egy objektum lehet first responder az alkalmazásban. A kijelölés automatikusan (UITextField fókusz esetén) vagy programozottan a becomeFirstResponder metóduson keresztül történik. A Apple Developer Documentation (2026) szerint egy objektum csak akkor válhat first responder-ré, ha a canBecomeFirstResponder metódusa true-t ad vissza, ami ezt a mechanizmust egyértelművé és ellenőrizhetővé teszi.

Főbb pontok

  • First Responder — a beviteli események fő fogadója, automatikusan vagy a becomeFirstResponderen keresztül kijelölve.
  • Csak egy objektum lehet first responder az alkalmazásban egy adott pillanatban.
  • canBecomeFirstResponder true-t kell visszaadnia, hogy az objektum first responder lehessen.
  • ResignFirstResponder eltávolítja a first responder státuszt és elrejti a billentyűzetet a UITextField számára.
  • UITextField és UITextView first responder-ré válnak, amikor fókuszt kapnak a felhasználótól.

Mi az a First Responder

First Responder — egy UIResponder objektum, amely jelenleg beviteli eseményeket fogad egy iOS-alkalmazásban. A rendszer az összes érintési eseményt, billentyűlenyomást, mozgási eseményt (az eszköz megrázása) és műveleti üzenetet (pl. helyi menü meghívása) pontosan ehhez az objektumhoz irányítja.

A first responder koncepció az első láncszem a Responder Chain-ben. Ha a first responder nem dolgozza fel a kapott eseményt, az automatikusan továbbítódik a lánc következő objektumának. Ez garantálja, hogy az esemény nem vész el, hanem egymás után felkínálásra kerül az összes potenciális feldolgozónak a hierarchiában.

Az Apple szerint a first responder státusz szorosan kapcsolódik a UIResponder-hez és annak canBecomeFirstResponder és becomeFirstResponder metódusaihoz. Alapértelmezés szerint a UIView csak bizonyos alosztályok esetén ad vissza true-t — UITextField, UITextView, UISearchBar. Más nézetek, beleértve a sima UIView-t, false-t adnak vissza, ami megakadályozza a véletlen kijelölést.

Hogyan kerül kijelölésre a First Responder

Kijelölés a first responder kétféleképpen történhet: automatikusan, amikor a felhasználó megérint egy UITextField-et (a rendszer belsőleg meghívja a becomeFirstResponder-t), vagy programozottan, amikor a fejlesztő kifejezetten meghívja a becomeFirstResponder metódust bármely UIResponder objektumon.

A kijelölés előtt az iOS ellenőrzi a canBecomeFirstResponder-t. Ha a metódus false-t ad vissza, a becomeFirstResponder hívása figyelmen kívül lesz hagyva, és az objektum nem válik first responder-ré. Ez egy védelmi mechanizmus, amely megakadályozza azon objektumok kijelölését, amelyek nem állnak készen az események feldolgozására — például rejtett vagy letiltott felületi elemek.

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

// Programozott kijelölés
textField.becomeFirstResponder()

// First responder ellenőrzése
if textField.isFirstResponder {
    print("A TextField most first responder")
}

Egy új first responder kijelölésekor az iOS automatikusan meghívja a resignFirstResponder-t az előzőn. Ez garantálja, hogy a rendszerben mindig csak egy objektum rendelkezik first responder státusszal. Ha az új objektum nem válhat first responder-ré (canBecomeFirstResponder = false), a régi megtartja státuszát.

First Responder és a billentyűzet

Az iOS billentyűzet a first responder mechanizmusának köszönhetően jelenik meg a képernyőn. Amikor egy UITextField vagy UITextView first responder-ré válik, a rendszer automatikusan megjeleníti az adott mező aktuális keyboardType-jához tartozó billentyűzetet. A first responder lemondásakor a billentyűzet elrejtésre kerül.

Ez a viselkedés egy kulcsfontosságú UX mechanizmus iOS-ben: a felhasználó megérint egy beviteli mezőt — a billentyűzet megjelenik; megnyomja a Return-t vagy megérint egy másik mezőt — a billentyűzet átkapcsol vagy elrejtőzik. A fejlesztő ezt a UIResponder metódusokon, valamint az inputView és inputAccessoryView segítségével kezelheti a szabványos billentyűzet egyedi billentyűzetre cseréléséhez.

Input Accessory View — egy kiegészítő panel a billentyűzet felett, amely szintén a first responder-hez van kötve. Például egy panel Next, Previous, Done gombokkal a beviteli mezők közötti navigációhoz. A billentyűzettel együtt jelenik meg és rejtőzik el, szinkronizálva a first responder státusszal.

EseményFirst responder státuszBillentyűzet
UITextField érintéseFirst responder leszMegjelenik
Return megnyomásaMarad vagy lemondMarad vagy elrejtőzik
Másik mező érintéseÁtmegy az új mezőreÁtkapcsol
resignFirstResponder hívásaEltávolításra kerülElrejtőzik
Alkalmazás elrejtéseAutomatikusan lemondElrejtőzik

First Responder lemondás

ResignFirstResponder — egy UIResponder metódus, amely eltávolítja a first responder státuszt az objektumról. A hívás után az objektum leállítja a beviteli események fogadását, és a billentyűzet (ha aktív volt) elrejtésre kerül. A metódus Bool-t ad vissza — true, ha a lemondás sikeres volt.

A fejlesztők gyakran hívják a resignFirstResponder-t válaszul a Done gomb megnyomására, a képernyő üres területének érintésére (view.endEditing) vagy a képernyő elhagyásakor. view.endEditing(true) — egy kényelmes módja az összes gyermek szöveges mező egyidejű lemondásának: végigjárja a teljes nézethierarchiát és meghívja a resignFirstResponder-t az aktuális first responder-en.

swift
// Lemondás Done gomb megnyomásakor
@objc func doneButtonTapped() {
    textField.resignFirstResponder()
}

// Lemondás üres terület érintésekor
override func touchesBegan(
    _ touches: Set<UITouch>,
    with event: UIEvent?
) {
    view.endEditing(true)
}

// Lemondás az összes űrlapmezőre
func validateAndSubmit() {
    view.endEditing(true)
    // Űrlapbeküldési logika
}

Vannak olyan helyzetek, amikor a resignFirstResponder false-t adhat vissza. Ez akkor történik, ha az objektum felülírta a metódust és kifejezetten megtiltotta a státusz eltávolítását. Például egy érvényesítés alatt álló szöveges mező ideiglenesen blokkolhatja a lemondást az adatvesztés megelőzése érdekében. Ilyen esetekben meg kell várni az érvényesítés befejezését, és csak azután kényszeríteni a lemondást.

First Responder ellenőrzése és monitorozása

UIResponder biztosítja az isFirstResponder tulajdonságot (csak olvasható), amely true-t ad vissza, ha az adott objektum jelenleg first responder. Ez hasznos feltételes logikához — például hogy ne hajtson végre egy műveletet, ha egy szöveges mező fókuszban van és a felhasználó adatokat ír be.

Az iOS nem biztosít beépített API-t az aktuális first responder lekéréséhez az egész alkalmazásra kiterjedően. A fejlesztők ezt a képességet a nézethierarchia bejárásával hozzák létre a UIResponder metódus segítségével. Az Apple megoldása egy gyenge hivatkozást javasol a first responder-re, amely KVO-n vagy delegáltakon keresztül frissíthető.

swift
// Kiterjesztés a first responder megtalálásához
extension UIView {
    var firstResponder: UIResponder? {
        guard isFirstResponder else {
            return subviews.compactMap { $0.firstResponder }.first
        }
        return self
    }
}

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

A first responder változásainak nyomon követéséhez fel lehet iratkozni a UIResponder.keyboardWillShowNotification és UIResponder.keyboardWillHideNotification értesítésekre — ezek közvetve jelzik, hogy egy szöveges objektum first responder-ré vált vagy megszűnt az lenni. Az isFirstResponder változására azonban nincs közvetlen feliratkozás; ehhez KVO-t vagy egyedi delegáltakat használnak.

First Responder és egyedi nézetek

Egyedi nézetek first responder-ré válhatnak, ha felülírják a canBecomeFirstResponder-t és true-t adnak vissza. Ez szükséges azon komponensek számára, amelyeknek billentyűzet- vagy fizikai gombeseményeket kell fogadniuk — például egyedi játékvezérlők vagy UITextView-alapú kódszerkesztők.

Egyéni first responder létrehozásakor fontos emlékezni az akadálymentesítésre: a VoiceOver és a Switch Control a first responder helyes kijelölésére támaszkodik a navigációhoz. Ha egy egyedi nézet first responder-ré válik, megfelelően kell implementálnia az UIAccessibility protokollt, és tájékoztatnia kell a segítő technológiákat a státuszáról.

Egyéni bevitelhez (pl. vonalkód-olvasó vagy numerikus billentyűzet) írja felül az inputView tulajdonságot — adjon vissza egy egyedi UIView-t, amely a szabványos billentyűzet helyett jelenik meg, amikor ez a nézet first responder. Hasonlóképpen, az inputAccessoryView egy panelt ad a billentyűzet fölé.

Gyakran Ismételt Kérdések

Mi az a First Responder iOS-ben?

First Responder — egy UIResponder objektum, amely jelenleg beviteli eseményeket fogad (érintések, billentyűk, gyorsulásmérő). A becomeFirstResponder segítségével kerül kijelölésre, true-t kell visszaadnia a canBecomeFirstResponder-ből. Csak egy objektum lehet first responder az alkalmazásban.

Hogyan lehet a UITextField-et first responder-ré tenni érintés nélkül?

Hívja meg a textField.becomeFirstResponder() programozottan, például a viewDidAppear-ben. Győződjön meg róla, hogy a textField nincs elrejtve, userInteractionEnabled = true, és isEnabled = true. Ha a mező UITableView-ben vagy UICollectionView-ben van, győződjön meg róla, hogy a cella látható a képernyőn.

Hogyan lehet elrejteni a billentyűzetet a szöveges mezőn kívüli érintéssel?

Adjon hozzá egy UITapGestureRecognizer-t a fő nézethez, és a kezelőjében hívja meg a view.endEditing(true)-t. Ez automatikusan megtalálja az aktuális first responder-t és meghívja a resignFirstResponder-t. Alternatív megoldásként írja felül a touchesBegan-t a UIViewController-ben az endEditing hívással.

Miért ad vissza false-t a becomeFirstResponder?

A becomeFirstResponder false-t ad vissza, ha a canBecomeFirstResponder false-t ad vissza, a nézet rejtett, nincs az ablak hierarchiában, vagy userInteractionEnabled = false. Ellenőrizze azt is, hogy a nézet hozzá lett-e adva az ablakhoz — a képernyőn nem lévő nézet nem fog működni a becomeFirstResponder-rel.

Hogyan lehet meghatározni, hogy melyik objektum az aktuális first responder?

Az iOS nem biztosít globális API-t ehhez. Használja a nézethierarchia rekurzív bejárását egy UIView kiterjesztésen keresztül, amely minden alnézetnél ellenőrzi az isFirstResponder-t. Alternatíva — tároljon egy gyenge hivatkozást az utolsó first responder-re az AppDelegate-ben, és frissítse azt UITextField delegáltakon keresztül.

Összegzés

  • First Responder — az egyetlen UIResponder objektum, amely beviteli eseményeket fogad iOS-ben. Ez az első láncszem a Responder Chain-ben.
  • becomeFirstResponder first responder-ré jelöli ki az objektumot, de csak akkor, ha a canBecomeFirstResponder true-t ad vissza — ez a rendszer explicit védelmi mechanizmusa.
  • resignFirstResponder eltávolítja a first responder státuszt; szöveges mezők esetén automatikusan elrejti a billentyűzetet.
  • UITextField és UITextView fókuszban first responder-ré válnak, és programozottan megváltoztathatók a becomeFirstResponder segítségével egy másik mezőn.
  • view.endEditing(true) — kényelmes módja az összes gyermek responder objektum lemondásának a nézethierarchiában.
  • Egyedi nézetek first responder-ré válhatnak a canBecomeFirstResponder felülírásával specifikus beviteli forgatókönyvekhez.
  • First responder követés rekurzív alnézet-bejárással vagy közvetve billentyűzetértesítéseken keresztül valósítható meg.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is