Sobes.tech
Middle

Hoe is de responder chain in iOS opgebouwd?

sobes.tech AI

Antwoord van AI

De responder-keten is een reeks van UIResponder-objecten die gebeurtenissen (tappen, gebaren, toetsenbordinvoer, tekstbewerkingsgebeurtenissen) in iOS afhandelen.

Wanneer een gebeurtenis plaatsvindt, stuurt het systeem deze naar de "eerste responder" (bijvoorbeeld een UIView waarop getapt is). Als de eerste responder de gebeurtenis niet kan afhandelen, wordt deze doorgegeven aan het volgende verantwoordelijke object in de keten.

Typische responder-keten:

  1. De meest diep geneste UIView.
  2. Zijn superview.
  3. Vervolgens in de hiërarchie, de superview tot aan de root view.
  4. UIViewController die deze view beheert.
  5. UIWindow.
  6. UIApplication.
  7. AppDelegate.

Verwerkingsproces:

  • Het systeem zoekt de UIView onder het contactpunt. Deze wordt de eerste responder.
  • De eerste responder roept zijn methode aan om het evenement te verwerken (bijvoorbeeld touchesBegan(_:with:)).
  • Als de methode het evenement niet verwerkt (of expliciet de superklasse-methode aanroept), wordt het evenement doorgegeven aan de volgende responder in de keten (next).
  • De keten gaat door totdat het evenement is verwerkt of het einde is bereikt (meestal UIApplication of AppDelegate, die het meestal negeren).

Voorbeeld van doorgeven in de keten:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Aangepaste logica voor het afhandelen van de tap
    if !handledByThisView {
        // Als deze view het evenement niet heeft afgehandeld, geef het door
        super.touchesBegan(touches, with: event)
    }
}

Belangrijke punten:

  • Objecten die gebeurtenissen kunnen afhandelen, erven van UIResponder.
  • Elke UIResponder heeft de eigenschap next, die het volgende object in de keten teruggeeft.
  • Als de gebeurtenisverwerkingsmethode in UIResponder niet is geïmplementeerd of de superklasse-methode aanroept, wordt het evenement standaard doorgegeven.
  • UIResponder speelt ook een rol in het beheer van focus en bewerkingscommando's.