Sobes.tech
Middle

iOS-də cavablandırıcı zənciri (responder chain) necə qurulub?

sobes.tech Süni İntellekt

AI-dan cavab

Cavab zənciri, iOS-də hadisələri (dokunma, jestlər, klaviatura basmaları, mətn redaktə hadisələri) işləyən UIResponder obyektlərinin ardıcıllığıdır.

Hadisə baş verdikdə, sistem onu "birinci cavablandırıcı"ya (məsələn, toxunma zamanı UIView) göndərir. Əgər ilk cavablandırıcı hadisəni işləyə bilməzsə, onu zəncir boyunca növbəti məsul obyektə keçirir.

Tipik cavablandırıcı zənciri:

  1. Ən dərin yerləşmiş UIView.
  2. Onun superview-si.
  3. Daha sonra, hierarxiyada, superview-dən kök görünümdən (root view) qədər.
  4. Bu görünümü idarə edən UIViewController.
  5. UIWindow.
  6. UIApplication.
  7. AppDelegate.

İşləmə prosesi:

  • Sistem toxunma nöqtəsinin altındakı UIView-ni axtarır. Bu UIView ilk cavablandırıcı olur.
  • İlk cavablandırıcı öz metodunu çağırır hadisəni işləmək üçün (məsələn, touchesBegan(_:with:)).
  • Əgər metod hadisəni işləməzsə (və ya açıq şəkildə superklass metodunu çağırırsa), hadisə zəncir boyunca növbəti cavablandırıcıya ötürülür (next).
  • Zəncir davam edir, hadisə işlənənə və ya sona çatana qədər (adətən UIApplication və ya AppDelegate, onları adətən görməzdən gəlirlər).

Zəncirdə ötürmə nümunəsi:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Xüsusi toxunma işləmə məntiqi
    if !handledByThisView {
        // Əgər bu görünüş hadisəni işləməyibsə, davam et
        super.touchesBegan(touches, with: event)
    }
}

Əsas nöqtələr:

  • Hadisələri işləyə bilən obyektlər UIResponder-dən irsən gəlir.
  • Hər UIResponder-in next xüsusiyyəti zəncirdəki növbəti obyekti qaytarır.
  • Əgər UIResponder-də hadisə işləmə metodu tətbiq edilməyibsə və ya superklass metodunu çağırırsa, hadisə standart olaraq növbəti obyektə ötürülür.
  • UIResponder həmçinin fokusun idarə olunmasında və redaktə komandalarında rol oynayır.