Sobes.tech
Middle

Como funciona a cadeia de respondentes (responder chain) no iOS?

sobes.tech IA

Resposta da IA

A cadeia de respondedores é uma sequência de objetos UIResponder que lidam com eventos (toques, gestos, pressionamentos de teclas, eventos de edição de texto) no iOS.

Quando ocorre um evento, o sistema envia-o ao "primeiro respondedor" (por exemplo, um UIView no qual foi feito um toque). Se o primeiro respondedor não puder lidar com o evento, ele o passa ao longo da cadeia para o próximo objeto responsável.

Cadeia típica de respondedores:

  1. O UIView mais profundamente aninhado.
  2. O seu superview.
  3. Depois, na hierarquia, o superview até à vista raiz (root view).
  4. UIViewController que gere essa vista.
  5. UIWindow.
  6. UIApplication.
  7. AppDelegate.

Processo de tratamento:

  • O sistema procura o UIView sob o ponto de contacto. Este UIView torna-se o primeiro respondedor.
  • O primeiro respondedor chama o seu método para tratar o evento (por exemplo, touchesBegan(_:with:)).
  • Se o método não tratar o evento (ou chamar explicitamente o método da superclasse), o evento é passado ao próximo respondedor na cadeia (next).
  • A cadeia continua até que o evento seja tratado ou chegue ao final (normalmente UIApplication ou AppDelegate, que geralmente o ignoram).

Exemplo de transmissão na cadeia:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // Lógica personalizada de tratamento do toque
    if !handledByThisView {
        // Se este vista não tratou o evento, passá-lo adiante
        super.touchesBegan(touches, with: event)
    }
}

Pontos-chave:

  • Os objetos capazes de tratar eventos herdam de UIResponder.
  • Cada UIResponder tem a propriedade next, que devolve o próximo objeto na cadeia.
  • Se o método de tratamento de eventos em UIResponder não estiver implementado ou chamar o método da superclasse, o evento é passado por padrão para o próximo.
  • UIResponder também desempenha um papel na gestão do foco e nos comandos de edição.