Sobes.tech
Middle

Kuidas on iOS-is üles ehitatud vastajate ahel?

sobes.tech AI

Vastus AI-lt

Vastajate ketrajada on UIResponder objektide jada, mis töötlevad sündmusi (puudutused, žestid, klaviatuuri vajutused, teksti redigeerimise sündmused) iOS-is.

Kui sündmus toimub, saadab süsteem selle "esimesele vastajale" (näiteks UIView, millele tehti puudutus). Kui esimene vastaja ei suuda sündmust töödelda, edastab ta selle järgmisele vastutavale objektile.

Tüüpiline vastajate ketrajada:

  1. Kõige sügavam UIView.
  2. Selle superview.
  3. Hierarhias edasi superview kuni põhivaate (root view).
  4. UIViewController, mis juhib seda vaadet.
  5. UIWindow.
  6. UIApplication.
  7. AppDelegate.

Töötlusprotsess:

  • Süsteem otsib UIView puudutuspunkti all. See UIView saab esimese vastaja.
  • Esimene vastaja kutsub oma meetodi sündmuse töötlemiseks (näiteks touchesBegan(_:with:)).
  • Kui meetod ei tööta sündmusega (või otseselt kutsub superklassi meetodit), edastatakse sündmus järgmisele vastajale ketas (next).
  • Ketas jätkub, kuni sündmus on töödeldud või jõuab lõpuni (tavaliselt UIApplication või AppDelegate, kes tavaliselt ignoreerivad seda).

Näide ketta edasiandmisest:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Kohandatud töötlemislogika
    if !handledByThisView {
        // Kui see vaade ei töötlenud sündmust, edastame edasi
        super.touchesBegan(touches, with: event)
    }
}

Peamised punktid:

  • Objektid, mis suudavad sündmusi töödelda, pärivad UIResponder-ist.
  • Igal UIResponder-il on omadus next, mis tagastab järgmise objekti ketas.
  • Kui UIResponder-i töötlemismeetod ei ole rakendatud või kutsub otseselt superklassi meetodit, edastatakse sündmus automaatselt edasi.
  • UIResponder osaleb ka fookuse haldamises ja redigeerimiskäskude juhtimises.